Week01_네트워크 기초
Week 01 · 네트워크 기초
Day 1 · OSI 7계층 · 캡슐화 · 이더넷 · ARP
1-1. 왜 계층을 나누는가
네트워크 통신은 "전기 신호를 보내는 일"부터 "웹페이지를 보여주는 일"까지 할 일이 너무 많다. 그래서 일을 층(계층)으로 나눠 각자 맡은 일만 하도록 약속한 것이 OSI 7계층 모델(ISO 표준)이다.
택배에 비유하면 이렇다. 나는 편지(데이터)만 쓴다. 편지를 상자에 넣고 송장을 붙이는 건 포장 담당, 어느 도시로 보낼지 정하는 건 물류센터, 실제로 트럭을 모는 건 기사다. 각 담당자는 자기 바로 위·아래 담당자와의 약속만 지키면 된다.
이렇게 나누면 장점이 있다. 케이블을 광케이블로 바꿔도(1계층) 웹 브라우저(7계층)는 고칠 필요가 없다. 문제가 생겼을 때 "몇 계층 문제인지"로 범위를 좁혀 진단할 수도 있다.
1-2. 계층별 역할 한눈에
| 계층 | 이름 | 하는 일 (한 줄) | PDU(데이터 단위) | 주소/식별자 | 대표 프로토콜 | 장비 |
|---|---|---|---|---|---|---|
| 7 | 응용 | 사용자 서비스 제공 | 데이터(메시지) | - | HTTP, FTP, SMTP, DNS, SSH, Telnet, SNMP | L7 스위치, 프록시, WAF |
| 6 | 표현 | 데이터 형식 변환·인코딩·압축·암호화 | 데이터 | - | JPEG, MPEG, ASCII, (암호화 개념) | - |
| 5 | 세션 | 대화(세션) 수립·유지·동기화 | 데이터 | - | NetBIOS, RPC, (SSL/TLS를 여기로 보기도) | - |
| 4 | 전송 | 종단 간 신뢰성, 포트로 프로세스 구분 | 세그먼트(TCP) / 데이터그램(UDP) | 포트 번호 | TCP, UDP | L4 스위치 |
| 3 | 네트워크 | 경로 선택(라우팅), 논리 주소 | 패킷 | IP 주소 | IP, ICMP, IGMP, IPSec, (라우팅: RIP, OSPF, BGP) | 라우터, L3 스위치 |
| 2 | 데이터링크 | 같은 네트워크 안 노드 간 전달, 오류 검출 | 프레임 | MAC 주소 | Ethernet, PPP, HDLC, 802.11(Wi-Fi), (ARP) | 스위치, 브리지 |
| 1 | 물리 | 0/1을 전기·빛·전파 신호로 | 비트 | - | RS-232, 케이블 규격 | 허브, 리피터 |
- 외우는 법(아래→위): 물·데·네·전·세·표·응
- 표현 계층의 "암호화"는 개념상 분류일 뿐이다. 실제 TLS는 전송계층(TCP) 위·응용계층 아래에서 동작해서 시험에서는 "4계층과 7계층 사이" 또는 "세션/표현 계층"으로 보기도 한다. 문제의 보기 구성을 보고 판단한다.
1-3. TCP/IP 4계층과의 대응
OSI는 "참고용 이론 모델", TCP/IP는 "실제 인터넷이 쓰는 모델"이다.
OSI 7계층 TCP/IP 4계층 예시
┌──────────────┐
│ 7 응용 │
│ 6 표현 │ ──▶ 응용 (Application) HTTP, DNS, SSH, SMTP
│ 5 세션 │
├──────────────┤
│ 4 전송 │ ──▶ 전송 (Transport) TCP, UDP
├──────────────┤
│ 3 네트워크 │ ──▶ 인터넷 (Internet) IP, ICMP, ARP*
├──────────────┤
│ 2 데이터링크 │ ──▶ 네트워크 접근 Ethernet, Wi-Fi
│ 1 물리 │ (Network Access)
└──────────────┘
* ARP는 교재에 따라 인터넷 계층 또는 네트워크 접근 계층으로 분류
1-4. 캡슐화(Encapsulation)와 역캡슐화
보내는 쪽은 위에서 아래로 내려가며 각 계층의 헤더를 앞에 붙인다(2계층은 뒤에 트레일러 FCS도 붙인다). 받는 쪽은 아래에서 위로 올라가며 헤더를 하나씩 떼어내며 해석한다. 이것이 역캡슐화(Decapsulation)다.
택배 비유: 편지 → 봉투(TCP 헤더: 몇 호 방으로) → 상자(IP 헤더: 어느 아파트로) → 트럭 적재표(이더넷 헤더: 다음 정거장 어디로).
[송신: 위→아래 캡슐화]
응용 : [ HTTP 데이터 ]
전송 : [TCP 헤더][ HTTP 데이터 ] ← 세그먼트
네트워크 : [IP 헤더][TCP 헤더][ HTTP 데이터 ] ← 패킷
데이터링크: [Ethernet 헤더][IP 헤더][TCP 헤더][ HTTP 데이터 ][FCS] ← 프레임
물리 : 0101100101110100 ... (비트 신호)
[수신: 아래→위 역캡슐화] 프레임 → FCS 검사 → 이더넷 헤더 제거 → IP 헤더 제거 → TCP 헤더 제거 → 데이터
각 헤더에는 "다음 계층이 누구인지" 알려주는 필드가 있다. 이게 있어야 받는 쪽이 올바르게 위로 넘긴다.
| 헤더 | "위 계층이 누구인지" 표시하는 필드 | 대표 값 |
|---|---|---|
| Ethernet | EtherType (2바이트) | 0x0800 = IPv4, 0x0806 = ARP, 0x86DD = IPv6, 0x8100 = VLAN 태그 |
| IP | Protocol (IPv6는 Next Header) | 1 = ICMP, 6 = TCP, 17 = UDP, 50 = ESP, 51 = AH |
| TCP/UDP | 목적지 포트 | 80 = HTTP, 53 = DNS ... |
1-5. 이더넷 프레임과 MAC 주소
MAC 주소는 네트워크 카드(NIC)에 부여된 48비트(6바이트) 물리 주소다. 00:1A:2B:3C:4D:5E처럼 16진수 12자리로 쓴다. 앞 24비트는 제조사 식별 번호(OUI), 뒤 24비트는 제조사가 붙인 일련번호다.
MAC은 "같은 네트워크(같은 브로드캐스트 도메인) 안에서" 다음 장비에 전달할 때 쓰고, IP는 "최종 목적지"를 가리킨다. 라우터를 하나 지날 때마다 MAC 주소는 바뀌고, IP 주소는 (NAT가 없다면) 그대로다. 택배 비유: 최종 주소(IP)는 그대로지만 "이번 구간 트럭이 어느 물류센터로 가는지"(MAC)는 구간마다 바뀐다.
Ethernet II 프레임 구조 (바이트)
┌──────────┬─────┬──────────┬──────────┬──────────┬────────────────────┬─────┐
│ Preamble │ SFD │ 목적지MAC │ 출발지MAC │ EtherType│ Payload(데이터) │ FCS │
│ 7 │ 1 │ 6 │ 6 │ 2 │ 46 ~ 1500 │ 4 │
└──────────┴─────┴──────────┴──────────┴──────────┴────────────────────┴─────┘
└──────── 헤더 14바이트 ─────────┘ └ MTU 1500 ┘ └ CRC 오류검출
- MTU(Maximum Transmission Unit): 2계층이 한 번에 실을 수 있는 최대 데이터 크기. 이더넷은 1500바이트. IP 패킷이 이보다 크면 쪼개야 한다(단편화, Day 2).
- FCS: CRC로 프레임 손상 여부만 검사한다. 오류가 있으면 버린다(재전송은 상위 TCP 몫).
- 특수 MAC:
FF:FF:FF:FF:FF:FF= 브로드캐스트(같은 네트워크 전원에게).
NIC는 원래 목적지 MAC이 자기 것(또는 브로드캐스트·멀티캐스트)인 프레임만 받아들인다. 무차별 모드로 바꾸면 자기 것이 아닌 프레임도 모두 받아서 위로 올린다. 패킷 캡처(tcpdump, Wireshark)·스니핑의 전제 조건이다.
1-6. ARP — IP 주소로 MAC 주소를 찾는 법
내 PC(192.168.0.10)가 같은 네트워크의 192.168.0.20에게 보내려 한다. IP는 알지만 프레임을 만들려면 상대 MAC 주소가 필요하다. 이 MAC을 알아내는 프로토콜이 ARP(Address Resolution Protocol) 다.
아파트 비유: "302호 사는 김철수 씨 계세요?"라고 단지 방송(브로드캐스트)을 하면, 김철수 씨만 "저예요, 제 현관 번호는 이거예요"라고 직접 답한다(유니캐스트).
동작 단계
- 먼저 내 ARP 캐시(최근 알아낸 IP↔MAC 표)를 본다. 있으면 바로 사용.
- 없으면 ARP Request를 브로드캐스트(목적지 MAC
FF:FF:FF:FF:FF:FF)로 보낸다. 내용: "192.168.0.20 가진 분 MAC 알려주세요. 저는 192.168.0.10 / AA:AA:..." - 같은 네트워크의 모든 호스트가 받지만, 해당 IP를 가진 호스트만 응답한다.
- 대상은 ARP Reply를 유니캐스트로 보낸다: "192.168.0.20은 BB:BB:...입니다."
- 요청자는 결과를 ARP 캐시에 저장한다(일정 시간 후 만료. 만료 시간은 OS마다 다르다).
sequenceDiagram
participant A as PC-A 192.168.0.10 (AA:AA)
participant N as 같은 네트워크 전체
participant B as PC-B 192.168.0.20 (BB:BB)
A->>N: ARP Request (브로드캐스트 FF:FF:FF:FF:FF:FF) 192.168.0.20의 MAC은?
N->>B: (모두 수신, B만 해당)
B-->>A: ARP Reply (유니캐스트) 192.168.0.20 = BB:BB
Note over A: ARP 캐시에 192.168.0.20 → BB:BB 저장
A->>B: 이후 데이터 프레임 (목적지 MAC BB:BB)- 목적지가 다른 네트워크면? 상대 MAC이 아니라 기본 게이트웨이(라우터)의 MAC을 ARP로 찾는다. 프레임은 라우터로 가고, 라우터가 다음 구간으로 넘긴다.
- ARP 패킷의 Opcode: 1 = Request, 2 = Reply. (RARP: MAC으로 IP를 묻는 옛 프로토콜, 3/4)
- Gratuitous ARP(GARP): 자기 IP에 대해 스스로 알리는 ARP. IP 충돌 검사나 장애 조치 때 쓴다.
ARP에는 인증이 없다. 그리고 많은 OS는 요청하지 않은 Reply도 받아서 캐시를 갱신한다. 공격자가 "게이트웨이 IP = 내 MAC"이라는 가짜 Reply를 계속 보내면 피해자의 트래픽이 공격자를 거쳐 간다(중간자 공격). 대응: 정적 ARP 등록(arp -s), 스위치의 DAI(Dynamic ARP Inspection), ARP 감시 도구. 자세한 건 Week07_네트워크 보안.
1-7. 실습 · ARP 캐시 확인
Windows
C:\> arp -a
Interface: 192.168.0.10 --- 0xb
Internet Address Physical Address Type
192.168.0.1 00-1a-2b-3c-4d-5e dynamic
192.168.0.20 bb-bb-bb-11-22-33 dynamic
192.168.0.255 ff-ff-ff-ff-ff-ff static
224.0.0.22 01-00-5e-00-00-16 static
Interface: 192.168.0.10: 내 NIC의 IP192.168.0.1 ... dynamic: 게이트웨이. ARP로 동적으로 배운 항목(시간이 지나면 사라짐)192.168.0.255 ... ff-ff-...: 브로드캐스트 주소 → 브로드캐스트 MACstatic: 수동 또는 시스템이 고정한 항목
Linux
$ arp -an
? (192.168.0.1) at 00:1a:2b:3c:4d:5e [ether] on eth0
$ ip neigh
192.168.0.1 dev eth0 lladdr 00:1a:2b:3c:4d:5e REACHABLE
- 최신 리눅스는
arp(net-tools)가 기본 설치되지 않은 경우가 많고ip neigh를 쓴다. - 정적 등록: Linux
arp -s 192.168.0.1 00:1a:2b:3c:4d:5e, Windowsarp -s 192.168.0.1 00-1a-2b-3c-4d-5e(최신 Windows는netsh interface ipv4 add neighbors도 사용)
arp -a 결과에서 서로 다른 IP 두 개(특히 게이트웨이)가 같은 MAC을 가지고 있으면 의심한다.
⚠️ 시험 함정
- ARP Request = 브로드캐스트, ARP Reply = 유니캐스트. 둘 다 브로드캐스트라고 쓴 보기가 함정.
- ARP는 IP → MAC, RARP는 MAC → IP. 방향을 바꿔 놓은 보기가 자주 나온다.
- 라우터를 넘을 때 바뀌는 건 MAC, 유지되는 건 IP(NAT 제외). 반대로 쓴 보기 주의.
- "스위치 = 3계층"(X) → 일반 스위치는 2계층. "L3 스위치"는 라우팅 기능이 있는 스위치로 3계층.
- 계층별 PDU: 4계층 세그먼트, 3계층 패킷, 2계층 프레임, 1계층 비트. "패킷 = 2계층"처럼 섞은 보기.
- TCP/IP 4계층에서 "세션 계층"은 따로 없다(응용 계층에 포함).
기출 포인트
- 매칭형: "다음 중 ○계층에 해당하지 않는 프로토콜은?" — 보기에 ICMP(3), ARP(2~3), TCP(4), SSH(7)를 섞어 낸다. ICMP를 4계층으로, ARP를 3계층 전용으로 착각하게 만드는 식.
- 장비-계층: 허브/스위치/라우터/L4 스위치 중 하나를 고르게 한다.
- ARP 동작 서술형: 요청·응답의 전송 방식(브로드/유니), 캐시의 역할, 인증 부재로 인한 스푸핑 가능성을 묻는다. 실기에서는
arp -a출력에서 이상한 줄을 찾게 하는 유형이 있다. - 캡슐화 순서: 데이터 → 세그먼트 → 패킷 → 프레임 → 비트 순서를 섞어 놓고 옳은 것을 고르게 한다.
확인 문제
Q1. OSI 7계층과 데이터 단위(PDU)의 연결로 옳은 것은?
① 물리 계층 - 프레임 ② 데이터링크 계층 - 패킷 ③ 네트워크 계층 - 패킷 ④ 전송 계층 - 비트
정답: ③
- ① 틀림: 물리 계층은 비트. 프레임은 2계층.
- ② 틀림: 데이터링크 계층은 프레임. 패킷은 3계층.
- ③ 맞음: 네트워크 계층(IP)의 단위가 패킷.
- ④ 틀림: 전송 계층은 세그먼트(TCP), UDP는 데이터그램이라고도 한다.
Q2. ARP의 동작에 대한 설명으로 옳지 않은 것은?
① ARP Request는 목적지 MAC을 FF:FF:FF:FF:FF:FF로 하여 전송한다.
② ARP Reply는 요청한 호스트에게 유니캐스트로 전송된다.
③ 목적지가 다른 네트워크에 있으면 최종 목적지 호스트의 MAC 주소를 ARP로 직접 요청한다.
④ ARP에는 응답의 진위를 확인하는 인증 절차가 없다.
정답: ③
- ① 옳음: 상대 MAC을 모르니 브로드캐스트로 묻는다.
- ② 옳음: 응답자는 요청자의 MAC을 이미 알기 때문에 유니캐스트로 답한다.
- ③ 틀림: 다른 네트워크의 호스트는 브로드캐스트가 닿지 않는다. 기본 게이트웨이의 MAC을 찾아 프레임을 라우터로 보낸다.
- ④ 옳음: 인증이 없어서 ARP 스푸핑이 가능하다.
Q3. 이더넷 헤더의 EtherType 값 중 ARP를 의미하는 것은?
① 0x0800 ② 0x0806 ③ 0x86DD ④ 0x8100
정답: ②
- ① 틀림: 0x0800은 IPv4.
- ② 맞음: 0x0806 = ARP.
- ③ 틀림: 0x86DD는 IPv6.
- ④ 틀림: 0x8100은 802.1Q VLAN 태그가 붙은 프레임 표시.
Q4. 패킷이 라우터 2개를 거쳐 목적지에 도달할 때 일반적으로(NAT 없음) 구간마다 바뀌는 값은?
① 출발지 IP 주소 ② 목적지 IP 주소 ③ 출발지·목적지 MAC 주소 ④ 목적지 포트 번호
정답: ③
- ①② 틀림: IP 주소는 종단 간(end-to-end) 주소라 NAT가 없으면 유지된다.
- ③ 맞음: MAC은 같은 링크 안에서만 의미가 있어 라우터를 지날 때마다 새 프레임으로 다시 만든다.
- ④ 틀림: 포트는 4계층 정보로 라우터가 바꾸지 않는다(PAT 장비는 예외).
Q5. 스니핑을 위해 NIC가 자신에게 온 것이 아닌 프레임도 받아들이도록 설정하는 모드는?
① 모니터 모드 ② 무차별(Promiscuous) 모드 ③ 브리지 모드 ④ 전이중(Full-duplex) 모드
정답: ②
- ① 틀림: 모니터 모드는 무선에서 AP에 연결하지 않고 공중의 802.11 프레임을 수집하는 모드. 유선 스니핑의 일반 용어는 무차별 모드.
- ② 맞음.
- ③ 틀림: 브리지 모드는 장비/가상화 네트워크 연결 방식.
- ④ 틀림: 전이중은 송수신 동시 통신 방식으로 스니핑과 무관.
Day 2 · IP · TCP · UDP · ICMP 헤더와 동작
2-1. IP 헤더 — 패킷의 "송장"
IP(Internet Protocol)는 패킷을 최종 목적지까지 보내는 3계층 프로토콜이다. "최선형(Best-effort)" 서비스라서 도착을 보장하지 않는다. 분실·순서 뒤바뀜을 바로잡는 건 TCP의 몫이다.
IPv4 헤더 (기본 20바이트, 옵션 포함 최대 60바이트)
0 1 2 3 (비트)
┌───────┬───────┬───────────────┬───────────────────────────────┐
│Version│ IHL │ TOS(DSCP/ECN) │ Total Length │
├───────┴───────┴───────────────┼─────┬─────────────────────────┤
│ Identification │Flags│ Fragment Offset │
├───────────────┬───────────────┼─────┴─────────────────────────┤
│ TTL │ Protocol │ Header Checksum │
├───────────────┴───────────────┴───────────────────────────────┤
│ Source IP Address │
├───────────────────────────────────────────────────────────────┤
│ Destination IP Address │
├───────────────────────────────────────────────────────────────┤
│ Options (가변, 드묾) │
└───────────────────────────────────────────────────────────────┘
| 필드 | 크기 | 의미 | 보안 관련 포인트 |
|---|---|---|---|
| Version | 4bit | 4 = IPv4 | |
| IHL | 4bit | 헤더 길이(4바이트 단위). 최소 5 → 20바이트 | |
| Total Length | 16bit | 헤더+데이터 전체 길이, 최대 65,535 | 65,535 초과 조립 → Ping of Death |
| Identification | 16bit | 단편들이 같은 원본 소속임을 표시 | |
| Flags | 3bit | (예약) / DF(Don't Fragment) / MF(More Fragments) | |
| Fragment Offset | 13bit | 이 조각이 원본의 어디서 시작하는지(8바이트 단위) | 겹치게 조작 → Teardrop |
| TTL | 8bit | 라우터를 지날 때마다 1 감소, 0이 되면 폐기하고 ICMP Time Exceeded 반환 | traceroute 원리, OS 추정(초기값 Linux 64, Windows 128 등이 흔함) |
| Protocol | 8bit | 상위 프로토콜 번호 | 1 ICMP, 2 IGMP, 6 TCP, 17 UDP, 50 ESP, 51 AH |
| Header Checksum | 16bit | 헤더만 검사(데이터 X), TTL 바뀌면 라우터가 재계산 | |
| Source / Destination IP | 32bit씩 | 출발지·목적지 주소 | 출발지 위조 = IP 스푸핑 (Land 공격: 출발지=목적지) |
2-2. 단편화(Fragmentation) — Teardrop을 이해하기 위한 준비
IP 패킷이 경로상 MTU(이더넷 1500)보다 크면 조각으로 나눈다. 받는 쪽(최종 목적지)은 Identification이 같은 조각들을 Offset 순서대로 이어 붙여 원본을 복원한다.
예시: 데이터 3,980바이트 + IP 헤더 20바이트 = 4,000바이트 패킷, MTU 1500
- 조각당 실을 수 있는 데이터 = 1500 − 20(헤더) = 1,480바이트 (8의 배수여야 함 → 1480은 8×185로 OK)
| 조각 | 데이터 범위(바이트) | 데이터 길이 | Offset 값 (=시작/8) | MF |
|---|---|---|---|---|
| 1 | 0 ~ 1479 | 1480 | 0 | 1 |
| 2 | 1480 ~ 2959 | 1480 | 185 | 1 |
| 3 | 2960 ~ 3979 | 1020 | 370 | 0 (마지막) |
- 마지막 조각만 MF = 0. 나머지는 MF = 1("뒤에 더 있음").
- DF = 1이면 단편화 금지. 쪼개야 하는데 DF가 켜져 있으면 라우터는 버리고 ICMP Type 3 Code 4(단편화 필요)를 돌려준다. (Path MTU Discovery 원리)
- Teardrop: Offset을 서로 겹치거나 틈이 생기게 조작 → 재조립 과정에서 오류를 유발해 시스템을 멈추게 한 공격(구형 OS 대상).
- Tiny Fragment: 첫 조각을 너무 작게 만들어 TCP 헤더(포트 정보)가 두 번째 조각으로 밀리게 → 포트 기반 필터를 우회. Fragment Overlap: 뒤 조각이 앞 조각의 헤더 부분을 덮어써 필터 우회.
2-3. TCP 헤더와 플래그
TCP(Transmission Control Protocol)는 연결 지향·신뢰성 보장 프로토콜이다. 순서번호로 순서를 맞추고, 확인응답(ACK)으로 도착을 확인하고, 안 온 건 재전송한다.
TCP 헤더 (기본 20바이트)
┌───────────────────────────────┬───────────────────────────────┐
│ Source Port (16) │ Destination Port (16) │
├───────────────────────────────┴───────────────────────────────┤
│ Sequence Number (32) │
├───────────────────────────────────────────────────────────────┤
│ Acknowledgment Number (32) │
├───────┬───────┬─┬─┬─┬─┬─┬─┬─┬─┬───────────────────────────────┤
│Offset │Reserv.│C│E│U│A│P│R│S│F│ Window Size (16) │
│ (4) │ │W│C│R│C│S│S│Y│I│ │
│ │ │R│E│G│K│H│T│N│N│ │
├───────┴───────┴─┴─┴─┴─┴─┴─┴─┴─┼───────────────────────────────┤
│ Checksum (16) │ Urgent Pointer (16) │
├───────────────────────────────┴───────────────────────────────┤
│ Options (MSS, Window Scale, SACK 등) │
└───────────────────────────────────────────────────────────────┘
| 플래그 | 이름 | 의미 |
|---|---|---|
| SYN | Synchronize | 연결 요청, 초기 순서번호(ISN) 동기화 |
| ACK | Acknowledgment | 확인응답 번호 필드가 유효함 (연결 후 거의 모든 패킷에 켜짐) |
| FIN | Finish | 정상 종료 요청 ("더 보낼 데이터 없음") |
| RST | Reset | 강제 종료/연결 거부 (닫힌 포트에 SYN이 오면 RST로 응답) |
| PSH | Push | 버퍼에 모으지 말고 바로 응용 계층으로 전달 |
| URG | Urgent | 긴급 데이터 있음, Urgent Pointer 유효 |
| (ECE, CWR) | 혼잡 알림(ECN)용. 시험에서는 보통 앞의 6개만 다룸 |
- 외우는 법: U-A-P-R-S-F ("우아프르스프")
- Sequence Number: 내가 보내는 데이터의 첫 바이트 번호. ACK Number: "다음에 받고 싶은 바이트 번호" (= 받은 마지막 바이트 + 1)
- Window Size: 수신 버퍼 여유 → 송신 속도 조절(흐름 제어, 슬라이딩 윈도우). 네트워크 혼잡 시 속도를 줄이는 건 혼잡 제어(Slow Start 등).
- ISN(초기 순서번호)이 예측 가능하면 공격자가 정상 세션에 끼어들 수 있다 → 세션 하이재킹. 그래서 현대 OS는 ISN을 무작위화한다.
2-4. 3-way Handshake (연결 수립)
TCP는 데이터를 보내기 전에 양쪽이 "서로 받을 준비가 됐고, 내 순서번호는 이거다"를 확인한다. 3번 주고받으므로 3-way.
sequenceDiagram
participant C as 클라이언트 (CLOSED)
participant S as 서버 (LISTEN)
C->>S: ① SYN, seq=1000
Note left of C: SYN_SENT
S->>C: ② SYN+ACK, seq=5000, ack=1001
Note right of S: SYN_RECEIVED
C->>S: ③ ACK, seq=1001, ack=5001
Note left of C: ESTABLISHED
Note right of S: ESTABLISHED- SYN: 클라이언트가 "연결하자, 내 시작 번호는 1000" → 클라이언트 상태
SYN_SENT - SYN+ACK: 서버가 "좋아(ack=1001, 1000 받았으니 다음은 1001), 내 시작 번호는 5000" → 서버 상태
SYN_RECEIVED(리눅스 netstat 표기SYN_RECV) - ACK: 클라이언트가 "확인(ack=5001)" → 양쪽
ESTABLISHED
서버는 ②를 보낸 뒤 ③을 기다리며 반쯤 열린 연결(half-open) 정보를 백로그 큐에 저장한다. 공격자가 출발지를 위조한 SYN만 대량으로 보내면 ③이 영원히 오지 않아 큐가 가득 차고, 정상 사용자의 연결을 받지 못한다. 서버 netstat에 SYN_RECV가 비정상적으로 많이 보이면 의심한다. 대응: SYN Cookie, 백로그 큐 증가, 타임아웃 단축, 방화벽/IPS 임계치.
2-5. 4-way Handshake (연결 종료)와 상태 전이
TCP는 양방향 통로라서 한 방향씩 따로 닫는다. 그래서 FIN과 ACK가 두 쌍, 총 4번.
sequenceDiagram
participant C as 클라이언트 (먼저 끊는 쪽)
participant S as 서버
Note over C,S: 둘 다 ESTABLISHED
C->>S: ① FIN
Note left of C: FIN_WAIT_1
S->>C: ② ACK
Note right of S: CLOSE_WAIT
Note left of C: FIN_WAIT_2
Note right of S: (남은 데이터 전송 후)
S->>C: ③ FIN
Note right of S: LAST_ACK
C->>S: ④ ACK
Note left of C: TIME_WAIT (2MSL 대기 후 CLOSED)
Note right of S: CLOSED| 상태 | 누가 | 의미 |
|---|---|---|
| LISTEN | 서버 | 연결 요청 대기 중(포트 열림) |
| SYN_SENT | 클라이언트 | SYN 보내고 응답 대기 |
| SYN_RECEIVED | 서버 | SYN+ACK 보내고 마지막 ACK 대기 (SYN Flooding 시 급증) |
| ESTABLISHED | 양쪽 | 연결 완료, 데이터 송수신 |
| FIN_WAIT_1 / 2 | 먼저 끊는 쪽 | FIN 보냄 / 그에 대한 ACK 받음 |
| CLOSE_WAIT | 나중 끊는 쪽 | FIN 받음, 내 쪽 마무리 중 (많이 쌓이면 응용 프로그램이 소켓을 안 닫는 버그) |
| LAST_ACK | 나중 끊는 쪽 | 내 FIN에 대한 마지막 ACK 대기 |
| TIME_WAIT | 먼저 끊는 쪽 | 마지막 ACK가 유실될 경우를 대비해 2MSL 동안 대기 |
| CLOSED | 연결 없음 |
- RST로 끊기: 정상 종료 절차 없이 즉시 끊는다. 닫힌 포트에 SYN이 오면 서버는 RST(+ACK) 로 응답한다 → 포트 스캔에서 "닫힘" 판정 근거.
2-6. UDP — 단순하고 빠른 전송
UDP(User Datagram Protocol)는 연결 수립도, 재전송도, 순서 보장도 없다. 헤더가 8바이트뿐이라 가볍고 빠르다. 실시간성이 중요하거나(음성·영상) 짧은 질의·응답(DNS)에 쓴다.
UDP 헤더 (8바이트)
┌──────────────────┬──────────────────┐
│ Source Port (16) │ Dest Port (16) │
├──────────────────┼──────────────────┤
│ Length (16) │ Checksum (16) │
└──────────────────┴──────────────────┘
| 비교 | TCP | UDP |
|---|---|---|
| 연결 | 연결 지향(3-way) | 비연결 |
| 신뢰성 | 순서·재전송·흐름/혼잡 제어 | 없음 (필요하면 응용이 처리) |
| 헤더 | 20바이트~ | 8바이트 |
| 속도 | 상대적으로 느림 | 빠름 |
| 전송 단위 | 세그먼트(바이트 스트림) | 데이터그램(메시지 단위) |
| 대표 서비스 | HTTP(S), FTP, SSH, Telnet, SMTP, POP3/IMAP | DNS 질의, DHCP, SNMP, TFTP, NTP, Syslog, 스트리밍 |
| 보안 측면 | ISN 예측 → 하이재킹, SYN Flood | 출발지 위조 쉬움 → 반사·증폭 DDoS(DNS, NTP, SSDP, Memcached 등) |
- 닫힌 UDP 포트에 패킷이 오면 호스트는 ICMP Type 3 Code 3(Port Unreachable) 로 응답한다. 응답이 없으면 "열림 또는 필터링" → UDP 스캔이 느리고 부정확한 이유.
2-7. ICMP — 오류 보고와 진단
ICMP(Internet Control Message Protocol)는 IP가 전달 중 문제를 알리거나 진단하는 데 쓰는 3계층 프로토콜이다(IP Protocol 번호 1). 포트 번호가 없다.
| Type | 이름 | 용도 / 대표 Code |
|---|---|---|
| 0 | Echo Reply | ping 응답 |
| 3 | Destination Unreachable | Code 0 네트워크, 1 호스트, 3 포트 도달 불가, 4 단편화 필요(DF 설정) |
| 5 | Redirect | "더 좋은 경로로 가라" (악용 시 경로 조작 → 보통 차단) |
| 8 | Echo Request | ping 요청 |
| 11 | Time Exceeded | Code 0 TTL 초과(traceroute), Code 1 재조립 시간 초과 |
| 12 | Parameter Problem | 헤더 오류 |
| 13 / 14 | Timestamp Request / Reply | 시간 정보 (정보 노출 우려로 차단 권고) |
- ping = Type 8 보내고 Type 0 받기.
- traceroute = TTL을 1, 2, 3...으로 늘려 보내 각 라우터가 돌려주는 Type 11로 경로 파악. 리눅스 traceroute는 기본으로 UDP(높은 포트 번호)를 보내고 목적지에서 Type 3 Code 3을 받아 끝을 안다. Windows
tracert는 ICMP Echo Request를 보낸다. - ICMP 관련 공격 미리보기: Ping of Death(65,535 초과 패킷), Smurf(브로드캐스트 주소로 출발지를 피해자로 위조한 Echo Request → 응답 폭탄), ICMP Redirect 공격, ICMP Flood.
2-8. 실습 · tcpdump로 handshake 보기
$ sudo tcpdump -n -S -i eth0 'tcp port 80'
10:15:30.100001 IP 192.168.0.5.51234 > 192.168.0.10.80: Flags [S], seq 1000, win 64240, options [mss 1460,...], length 0
10:15:30.100150 IP 192.168.0.10.80 > 192.168.0.5.51234: Flags [S.], seq 5000, ack 1001, win 65160, options [mss 1460,...], length 0
10:15:30.100300 IP 192.168.0.5.51234 > 192.168.0.10.80: Flags [.], ack 5001, win 502, length 0
10:15:30.100500 IP 192.168.0.5.51234 > 192.168.0.10.80: Flags [P.], seq 1001:1079, ack 5001, win 502, length 78: HTTP: GET / HTTP/1.1
(설명을 위해 순서번호를 단순화한 예시)
-n: IP/포트를 이름으로 바꾸지 않음,-S: 순서번호를 절대값으로 표시,-i eth0: 캡처할 인터페이스192.168.0.5.51234 > 192.168.0.10.80: 출발지 IP.포트 > 목적지 IP.포트 (클라이언트는 임의의 높은 포트 사용)Flags [S]= SYN,[S.]= SYN+ACK (.은 ACK),[.]= ACK만,[P.]= PSH+ACK,[F.]= FIN+ACK,[R]= RSTseq 1001:1079 ... length 78: 1001번부터 78바이트(1001~1078)를 보냄. 다음 seq는 1079.
⚠️ 시험 함정
- TIME_WAIT은 먼저 종료를 요청한 쪽(Active Close)에 생긴다. "서버에만 생긴다"(X).
- CLOSE_WAIT은 FIN을 받은 쪽에 생긴다. TIME_WAIT과 헷갈리게 출제.
- SYN Flooding 시 증가하는 상태는 SYN_RECEIVED(SYN_SENT 아님). SYN_SENT는 보내는 쪽(공격자/클라이언트) 상태.
- UDP 헤더는 8바이트, TCP는 기본 20바이트, IPv4도 기본 20바이트. 숫자를 섞어 출제.
- IP Header Checksum은 헤더만 검사한다. 데이터까지 검사하는 건 TCP/UDP 체크섬.
- Fragment Offset 단위는 8바이트. Offset 185 = 1,480바이트 위치.
- ICMP는 3계층이고 포트가 없다. "ICMP는 4계층" 또는 "ICMP 포트 번호"라는 보기는 틀림.
- Type 0 = Reply, Type 8 = Request. 거꾸로 쓴 보기 주의.
- traceroute: 리눅스 기본 UDP, Windows tracert ICMP. "모든 traceroute는 ICMP만 사용"(X).
기출 포인트
- 3-way handshake 순서와 각 단계의 상태 이름을 묻는 문제가 단골. 특히 "SYN Flooding 공격 시 서버에 쌓이는 상태"를 고르게 하는 유형.
- TCP 플래그 의미: "강제 종료에 사용하는 플래그", "버퍼링 없이 바로 전달" 같은 설명과 플래그를 연결.
- TCP vs UDP 비교표에서 틀린 행을 찾는 유형. "UDP는 흐름 제어를 한다" 같은 함정 보기.
- ICMP 타입 번호: Echo Request/Reply, Destination Unreachable, Time Exceeded 번호를 묻는다. traceroute 원리를 서술한 보기에서 오류를 찾게 하기도 한다.
- IP 헤더 필드: TTL의 역할, Protocol 번호(6/17/1), Flags(DF/MF)와 Offset. 단편화 계산은 7주차 Teardrop 문제와 연결된다.
확인 문제
Q1. TCP 3-way handshake에서 클라이언트가 seq=300인 SYN을 보냈고 서버가 seq=800인 SYN+ACK로 응답했다. 클라이언트의 세 번째 패킷 값으로 옳은 것은?
① ACK, seq=300, ack=800 ② ACK, seq=301, ack=801 ③ SYN+ACK, seq=301, ack=801 ④ ACK, seq=801, ack=301
정답: ②
- ① 틀림: SYN은 순서번호 1개를 소비한다. 다음 seq는 301, 서버 SYN에 대한 ack는 801.
- ② 맞음: seq=301(내 다음 번호), ack=801(서버 ISN 800 + 1).
- ③ 틀림: 세 번째 패킷은 ACK만 설정한다. SYN을 다시 켜지 않는다.
- ④ 틀림: seq와 ack를 뒤바꿨다.
Q2. 서버에서 netstat -an 결과 특정 포트에 SYN_RECV 상태가 수천 개 존재한다. 가장 의심되는 공격은?
① Smurf ② SYN Flooding ③ ARP 스푸핑 ④ Teardrop
정답: ②
- ① 틀림: Smurf는 ICMP Echo Reply가 대량 유입되는 공격. TCP 상태와 무관.
- ② 맞음: 마지막 ACK가 오지 않은 half-open 연결이 쌓인 것.
- ③ 틀림: ARP 스푸핑은 ARP 캐시 변조로, TCP 상태표에 흔적이 이렇게 남지 않는다.
- ④ 틀림: Teardrop은 IP 단편 재조립 오류를 노린다.
Q3. 4-way handshake에서 연결 종료를 먼저 요청한 쪽이 마지막 ACK를 보낸 뒤 일정 시간 머무르는 상태는?
① CLOSE_WAIT ② LAST_ACK ③ FIN_WAIT_2 ④ TIME_WAIT
정답: ④
- ① 틀림: CLOSE_WAIT은 FIN을 받은 쪽 상태.
- ② 틀림: LAST_ACK도 나중에 끊는 쪽이 자기 FIN을 보낸 뒤 상태.
- ③ 틀림: FIN_WAIT_2는 첫 FIN에 대한 ACK를 받고 상대 FIN을 기다리는 단계로, 마지막 ACK를 보내기 전이다.
- ④ 맞음: 마지막 ACK 유실에 대비해 2MSL 동안 대기한다.
Q4. 데이터 2,960바이트를 담은 IPv4 패킷(헤더 20바이트)을 MTU 1500 링크로 보낼 때 두 번째 조각의 Fragment Offset 값과 MF 플래그는?
① 1480, MF=0 ② 185, MF=0 ③ 185, MF=1 ④ 1500, MF=1
정답: ②
- 조각당 데이터 1,480바이트 → 2,960 = 1,480 + 1,480, 조각은 정확히 2개.
- 두 번째 조각의 시작 위치 1,480바이트 ÷ 8 = 185, 마지막 조각이므로 MF=0.
- ① 틀림: Offset은 바이트가 아닌 8바이트 단위.
- ③ 틀림: 두 번째가 마지막 조각이라 MF=0.
- ④ 틀림: 단위도 틀리고 헤더 크기를 잘못 넣은 값.
Q5. ICMP에 대한 설명으로 옳지 않은 것은?
① ping은 Echo Request(Type 8)와 Echo Reply(Type 0)를 사용한다.
② traceroute는 TTL 만료 시 돌아오는 Time Exceeded(Type 11)를 이용한다.
③ ICMP는 전송 계층 프로토콜로 포트 번호를 사용한다.
④ 닫힌 UDP 포트에 패킷이 도착하면 Destination Unreachable(Type 3)이 반환될 수 있다.
정답: ③
- ①②④ 옳음.
- ③ 틀림: ICMP는 네트워크 계층(IP Protocol 번호 1)이며 포트 개념이 없다. Type/Code로 메시지를 구분한다.
Day 3 · 포트 번호 · DNS · DHCP (★ 포트는 무조건 암기)
3-1. 포트 번호란
IP 주소가 "아파트 동 주소"라면 포트 번호는 "호수" 다. 한 컴퓨터(IP 하나) 안에서 웹 서버, 메일 서버, SSH 서버가 동시에 돌아가도 포트 번호로 어느 프로그램에 전달할지 구분한다. 포트는 16비트라 0~65535까지 있다.
| 구간 | 범위 | 용도 |
|---|---|---|
| Well-known | 0 ~ 1023 | 표준 서비스용. 리눅스에서 이 포트로 서버를 열려면 원칙적으로 root 권한 필요 |
| Registered | 1024 ~ 49151 | 특정 응용이 IANA에 등록 (MySQL 3306, RDP 3389 등) |
| Dynamic / Private | 49152 ~ 65535 | 클라이언트가 임시로 쓰는 포트(Ephemeral). 실제 OS별 범위는 다를 수 있다(예: 리눅스 기본 32768~60999) |
소켓(Socket) = IP 주소 + 포트. 하나의 TCP 연결은 (출발지 IP, 출발지 포트, 목적지 IP, 목적지 포트, 프로토콜) 5가지 값(5-tuple)으로 유일하게 구분된다. 방화벽 규칙도 이 값들로 만든다.
3-2. 주요 포트 표 (서비스가 무슨 일을 하는지까지)
| 포트 | 프로토콜 | 서비스 | 무슨 일을 하나 | 보안 메모 |
|---|---|---|---|---|
| 20 / 21 | TCP | FTP 데이터 / 제어 | 파일 전송. 21로 명령, 20으로 데이터(Active 모드) | 평문(계정·비번 노출), 익명 FTP 주의 → SFTP/FTPS |
| 22 | TCP | SSH (SFTP, SCP 포함) | 암호화된 원격 접속·파일 전송 | root 직접 로그인 차단 권고 |
| 23 | TCP | Telnet | 원격 터미널 | 평문 → 사용 금지, SSH로 대체 |
| 25 | TCP | SMTP | 메일 송신·서버 간 전달 | 오픈 릴레이 → 스팸 악용. 제출용 587, SMTPS 465 |
| 53 | UDP/TCP | DNS | 도메인 ↔ IP 변환 | 일반 질의 UDP, 존 전송·큰 응답은 TCP |
| 67 / 68 | UDP | DHCP 서버 / 클라이언트 | IP 자동 할당 | 가짜 DHCP 서버, 고갈 공격 |
| 69 | UDP | TFTP | 인증 없는 간이 파일 전송 (장비 설정·부팅 이미지) | 인증 없음 → 외부 차단 |
| 80 / 443 | TCP | HTTP / HTTPS | 웹 | HTTPS = HTTP over TLS. (HTTP/3는 UDP 443 기반 QUIC) |
| 88 | TCP/UDP | Kerberos | 윈도우 도메인 인증 | |
| 110 / 143 | TCP | POP3 / IMAP | 메일 수신 (POP3=내려받기, IMAP=서버에서 동기화) | 보안 버전 POP3S 995, IMAPS 993 |
| 123 | UDP | NTP | 시간 동기화 | monlist 증폭 공격 악용 사례 |
| 137 / 138 / 139 | UDP/UDP/TCP | NetBIOS 이름 / 데이터그램 / 세션 | 윈도우 구형 네트워크 이름·공유 | 외부 노출 금지 |
| 161 / 162 | UDP | SNMP / SNMP Trap | 네트워크 장비 관리 (Trap = 장비가 관리자에게 알림) | 기본 community public/private 변경, v3 사용 |
| 389 / 636 | TCP | LDAP / LDAPS | 디렉터리 서비스(사용자·조직 정보 조회) | |
| 445 | TCP | SMB (Direct) | 윈도우 파일·프린터 공유 | SMBv1 취약점(EternalBlue) → 워너크라이 |
| 514 | UDP | Syslog | 로그 원격 전송 | 평문·위조 가능 (TCP/TLS 전송 방식도 있음) |
| 1812 / 1813 | UDP | RADIUS 인증 / 과금 | 무선·VPN 사용자 인증 | (구형 구현은 1645/1646) |
| 3389 | TCP | RDP | 윈도우 원격 데스크톱 | 무차별 대입 표적 → VPN 뒤에 두기, NLA |
| 1433 / 1521 / 3306 | TCP | MSSQL / Oracle / MySQL | 데이터베이스 | 외부 직접 노출 금지 |
| 179 | TCP | BGP | ISP 간 라우팅 | |
| 520 | UDP | RIP | 내부 라우팅 |
- 2X는 원격·전송 형제: 20/21 FTP, 22 SSH, 23 Telnet, 25 SMTP
- 메일 3총사: 25 보내기(SMTP), 110 받아오기(POP3), 143 동기화(IMAP)
- UDP 대표: 53(질의), 67/68, 69, 123, 161/162, 514 → "작고 빨리 묻고 답하는 것들"
- 윈도우 공유: 137~139 NetBIOS, 445 SMB, 3389 RDP
3-3. DNS — 이름을 주소로 바꾸는 전화번호부
사람은 www.example.com을 기억하지만 컴퓨터는 IP로 통신한다. DNS(Domain Name System) 는 이름 → IP를 알려주는 분산 데이터베이스다. 하나의 거대한 서버가 아니라, 나무처럼 층층이 나뉜 서버들이 각자 자기 영역(Zone)만 책임진다.
. (루트, Root)
┌─────────┼──────────┐
com net kr ← TLD(최상위 도메인)
│ │
example co
│ │
www naver ... ← 각 기관의 권한 있는(Authoritative) 서버가 관리
질의 방식 두 가지
- 재귀적 질의(Recursive): "최종 답을 가져와 줘." 클라이언트 → 로컬 DNS(리졸버). 리졸버가 다 알아내서 답을 준다.
- 반복적 질의(Iterative): "난 모르지만 저기 물어봐." 리졸버 → 루트 → TLD → 권한 서버 순으로 직접 따라간다.
sequenceDiagram
participant PC as 내 PC
participant R as 로컬 DNS (리졸버, ISP/사내)
participant Root as 루트 DNS
participant TLD as .com DNS
participant Auth as example.com 권한 DNS
PC->>PC: ① 로컬 캐시, hosts 파일 확인
PC->>R: ② www.example.com? (재귀적 질의)
R->>Root: ③ www.example.com?
Root-->>R: .com 서버에 물어봐 (NS 정보)
R->>TLD: ④ www.example.com?
TLD-->>R: example.com 권한 서버에 물어봐
R->>Auth: ⑤ www.example.com?
Auth-->>R: A 레코드 203.0.113.10 (TTL 3600)
R-->>PC: ⑥ 203.0.113.10 (리졸버도 TTL 동안 캐시)- 클라이언트는 DNS 서버에 묻기 전에 로컬 DNS 캐시와 hosts 파일을 먼저 본다(리눅스는
/etc/nsswitch.conf의 순서 설정을 따르며 보통 files → dns).- Linux:
/etc/hosts, Windows:C:\Windows\System32\drivers\etc\hosts - 악성코드가 hosts 파일에
은행도메인 → 공격자IP를 넣으면 파밍(Pharming)이 된다.
- Linux:
- 리졸버가 답을 캐시하기 때문에, 가짜 응답을 캐시에 심으면 많은 사용자가 속는다 → DNS 캐시 포이즈닝. 대응: DNSSEC(응답에 전자서명), 질의 ID·출발 포트 무작위화.
주요 레코드
| 레코드 | 의미 | 예 |
|---|---|---|
| A | 도메인 → IPv4 | www → 203.0.113.10 |
| AAAA | 도메인 → IPv6 | www → 2001:db8::10 |
| CNAME | 별칭 → 정식 이름 | blog → www.example.com |
| MX | 메일 서버 (우선순위 값 포함) | example.com MX 10 mail.example.com |
| NS | 이 영역을 책임지는 네임서버 | |
| PTR | IP → 도메인 (역방향) | 10.113.0.203.in-addr.arpa → www |
| SOA | 영역의 기본 정보(일련번호, 갱신 주기) | |
| TXT | 텍스트. SPF·DKIM·DMARC 등 메일 인증에 활용 |
- 존 전송(Zone Transfer, AXFR): 주(Primary) DNS의 영역 정보를 보조(Secondary) DNS로 복사하는 것. TCP 53 사용. 아무에게나 허용하면 내부 호스트 목록이 통째로 유출 →
allow-transfer로 보조 서버 IP만 허용.
3-4. DHCP — IP 자동 배정 (DORA)
PC가 네트워크에 연결되면 IP·서브넷 마스크·게이트웨이·DNS 서버 주소가 필요하다. 이를 자동으로 빌려주는 것이 DHCP(서버 UDP 67, 클라이언트 UDP 68)다. "빌려준다(임대, Lease)"는 표현대로 임대 기간이 있다.
PC는 처음엔 자기 IP도 서버 주소도 모르므로 브로드캐스트로 시작한다.
sequenceDiagram
participant C as 클라이언트 (IP 없음 0.0.0.0)
participant S as DHCP 서버
C->>S: ① Discover (브로드캐스트) DHCP 서버 있나요?
S-->>C: ② Offer 192.168.0.50 어때요? (임대 8시간)
C->>S: ③ Request (브로드캐스트) 192.168.0.50 쓸게요
S-->>C: ④ Ack 확정. 게이트웨이 .1, DNS 8.8.8.8- Discover → Offer → Request → Ack = DORA
- Request를 다시 브로드캐스트하는 이유: 서버가 여러 대일 때 "나는 이 서버의 제안을 골랐다"를 모두에게 알려 다른 서버가 제안을 거둬들이게 하려고.
- 다른 네트워크의 DHCP 서버를 쓰려면 라우터에 DHCP Relay Agent(시스코
ip helper-address) 설정이 필요하다. 브로드캐스트는 라우터를 넘지 못하기 때문이다. - DHCP 서버를 못 찾으면 Windows 등은 APIPA(169.254.x.x) 를 스스로 붙인다.
| 공격 | 내용 | 대응 |
|---|---|---|
| DHCP Starvation(고갈) | MAC을 바꿔가며 Discover 폭탄 → 주소 풀 소진 | 포트 보안(포트당 MAC 수 제한) |
| Rogue DHCP(가짜 서버) | 가짜 서버가 먼저 Offer → 게이트웨이·DNS를 공격자로 지정 | DHCP Snooping(신뢰 포트에서만 Offer/Ack 허용) |
3-5. 실습 · nslookup / dig
C:\> nslookup www.example.com
Server: dns.google
Address: 8.8.8.8
Non-authoritative answer:
Name: www.example.com
Address: 203.0.113.10
Server/Address: 내가 물어본 DNS 서버(리졸버)Non-authoritative answer: 권한 서버가 아닌 리졸버의 캐시에서 온 답이라는 뜻- 레코드 종류 지정:
nslookup -type=mx example.com, 대화형에서set type=ns
$ dig www.example.com A
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41235
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;www.example.com. IN A
;; ANSWER SECTION:
www.example.com. 3600 IN A 203.0.113.10
;; Query time: 23 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
status: NOERROR: 정상 (없는 도메인이면NXDOMAIN)flags:qr=응답,rd=재귀 요청함,ra=서버가 재귀 지원, (aa가 있으면 권한 서버의 답)3600: TTL(초). 이 시간 동안 캐시된다- 존 전송 시도(점검용):
dig @ns1.example.com example.com AXFR→ 거부되어야 정상
(예시의 IP 203.0.113.x는 문서용 예약 대역이다.)
⚠️ 시험 함정
- DNS는 UDP만 쓴다(X) → 존 전송과 큰 응답은 TCP 53.
- SNMP 161은 UDP, Trap은 162. "SNMP는 TCP 161"(X).
- 메일 송신 SMTP 25, 수신 POP3 110 / IMAP 143. "POP3 = 메일 전송" 같은 역할 바꾸기.
- FTP는 20(데이터) / 21(제어). 반대로 쓴 보기 주의. Passive 모드에서는 데이터 포트가 서버가 정한 임의 포트가 된다.
- DHCP 서버는 67, 클라이언트는 68. 반대로 쓴 보기 주의.
- TFTP(69/UDP)와 FTP(21/TCP): TFTP는 인증이 없다.
- DORA에서 Request도 브로드캐스트. "Request는 유니캐스트"(X). (임대 갱신 때의 Request는 유니캐스트로 서버에 직접 보낸다 — 최초 할당과 구분)
- 재귀적 질의 = 클라이언트↔리졸버, 반복적 질의 = 리졸버↔루트/TLD/권한 서버. 바꿔 놓은 보기.
기출 포인트
- 포트-서비스 매칭: 가장 흔한 형태. 보기 4개 중 "잘못 연결된 것"을 고르게 한다. SNMP/Syslog/TFTP처럼 UDP 서비스의 프로토콜을 TCP로 바꿔 놓는 함정이 섞인다.
- DNS 동작: 재귀/반복 질의 구분, hosts 파일 우선 참조, 레코드 종류(MX, PTR, CNAME) 의미, 존 전송 제한 설정(
allow-transfer)을 묻는다. 3과목(어플리케이션 보안)의 DNS 보안·DNSSEC와 연결된다. - DHCP: DORA 순서, 사용 포트, DHCP Snooping의 목적을 묻는다.
- 안전하지 않은 서비스 고르기: Telnet, FTP, TFTP, rlogin처럼 평문/무인증 서비스와 그 대체 서비스(SSH, SFTP)를 연결.
확인 문제
Q1. 서비스와 기본 포트의 연결로 옳지 않은 것은?
① SSH - TCP 22 ② SNMP - UDP 161 ③ POP3 - TCP 143 ④ Syslog - UDP 514
정답: ③
- ① 옳음.
- ② 옳음: SNMP 요청은 UDP 161, Trap은 UDP 162.
- ③ 틀림: POP3는 110. 143은 IMAP.
- ④ 옳음: 전통적 syslog 원격 전송은 UDP 514.
Q2. DNS 존 전송에 대한 설명으로 옳은 것은?
① 클라이언트가 A 레코드를 조회하는 일반 질의를 말한다.
② 주로 UDP 53을 사용하며 크기 제한이 없다.
③ 누구에게나 허용하면 내부 호스트 정보가 노출될 수 있어 보조 DNS 서버로만 제한한다.
④ DNSSEC을 설정하면 존 전송이 자동으로 차단된다.
정답: ③
- ① 틀림: 존 전송은 서버 간 영역 데이터 전체 복제다.
- ② 틀림: 존 전송은 TCP 53을 사용한다.
- ③ 맞음:
allow-transfer { 보조서버IP; };처럼 제한한다. - ④ 틀림: DNSSEC은 응답 무결성·출처 인증을 위한 서명 기술로, 존 전송 접근 제어와는 별개다.
Q3. DHCP 동작 순서로 옳은 것은?
① Request → Offer → Discover → Ack
② Discover → Offer → Request → Ack
③ Discover → Request → Offer → Ack
④ Offer → Discover → Ack → Request
정답: ②
- DORA: 서버 찾기(Discover) → 제안(Offer) → 선택 요청(Request) → 확정(Ack).
- 나머지는 순서를 뒤섞은 것. 클라이언트는 IP가 없으니 반드시 Discover로 시작해야 한다.
Q4. 사용자 PC에서 은행 도메인을 입력했는데 위조 사이트로 접속된다. DNS 서버는 정상이었다. 가장 먼저 점검할 파일은?
① /etc/passwd ② hosts 파일 ③ /etc/shadow ④ resolv.conf의 search 항목
정답: ②
- ① ③ 틀림: 계정 정보 파일로 이름 해석과 무관.
- ② 맞음: hosts 파일은 DNS 질의보다 먼저 참조되므로 변조되면 파밍에 악용된다.
- ④ 틀림: resolv.conf는 사용할 DNS 서버와 검색 도메인을 지정한다. 변조 가능성은 있지만 문제에서 "DNS 서버는 정상"이라 했고, 특정 도메인만 고정 IP로 보내는 전형적 수법은 hosts 변조다.
Q5. 다음 중 UDP를 기본 전송 프로토콜로 사용하는 서비스로만 묶인 것은?
① DNS 질의, DHCP, TFTP ② FTP, SMTP, SNMP ③ SSH, Telnet, NTP ④ HTTP, POP3, Syslog
정답: ①
- ① 맞음: 셋 다 UDP(53, 67/68, 69).
- ② 틀림: FTP·SMTP는 TCP.
- ③ 틀림: SSH·Telnet은 TCP (NTP만 UDP).
- ④ 틀림: HTTP·POP3는 TCP (Syslog만 UDP).
Day 4 · IP 주소 · 서브네팅 · NAT · IPv6
4-1. IPv4 주소의 구조
IPv4 주소는 32비트를 8비트씩 4덩어리(옥텟)로 나눠 10진수로 쓴 것이다. 192.168.1.10 = 11000000.10101000.00000001.00001010.
주소는 네트워크 부분 + 호스트 부분으로 나뉜다. 아파트로 치면 "몇 동"(네트워크)과 "몇 호"(호스트)다. 어디까지가 네트워크인지 알려주는 것이 서브넷 마스크다. 마스크의 1인 비트 = 네트워크, 0인 비트 = 호스트.
IP : 192.168.1.10 = 11000000.10101000.00000001.00001010
마스크 : 255.255.255.0 = 11111111.11111111.11111111.00000000 (/24 = 1이 24개)
AND 연산 ──────────────────────────────────────────────
네트워크: 192.168.1.0 = 11000000.10101000.00000001.00000000
- AND 연산: 둘 다 1일 때만 1. IP와 마스크를 AND 하면 네트워크 주소가 나온다.
- 같은 네트워크(같은 네트워크 주소)끼리는 라우터 없이 ARP로 바로 통신하고, 다르면 게이트웨이로 보낸다.
4-2. 클래스와 특수 주소
| 클래스 | 첫 옥텟 | 첫 비트 | 기본 마스크 | 용도 |
|---|---|---|---|---|
| A | 0 ~ 127 (실사용 1~126) | 0 | /8 (255.0.0.0) | 대규모 |
| B | 128 ~ 191 | 10 | /16 (255.255.0.0) | 중규모 |
| C | 192 ~ 223 | 110 | /24 (255.255.255.0) | 소규모 |
| D | 224 ~ 239 | 1110 | - | 멀티캐스트 |
| E | 240 ~ 255 | 1111 | - | 실험·예약 |
| 특수 주소 | 의미 |
|---|---|
| 10.0.0.0/8 | 사설 (A) |
| 172.16.0.0/12 | 사설 (172.16.0.0 ~ 172.31.255.255) |
| 192.168.0.0/16 | 사설 (C) |
| 127.0.0.0/8 | 루프백 (자기 자신, 보통 127.0.0.1) |
| 169.254.0.0/16 | APIPA / 링크 로컬 (DHCP 실패 시 자동) |
| 100.64.0.0/10 | 통신사 대규모 NAT(CGNAT)용 공유 주소 |
| 0.0.0.0 | "이 호스트/모든 주소"(서버가 0.0.0.0:80으로 대기 = 모든 인터페이스에서 받음) |
| 255.255.255.255 | 제한된 브로드캐스트 (현재 네트워크 전체) |
| 192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24 | 문서·예시용 |
- 사설 IP는 인터넷에서 라우팅되지 않는다. 내부에서 자유롭게 쓰고, 인터넷으로 나갈 때 NAT로 공인 IP로 바꾼다.
- 외부(인터넷)에서 출발지가 사설 IP인 패킷이 들어오면 위조로 보고 차단한다(Ingress 필터링).
4-3. 서브네팅 — 큰 네트워크를 쪼개기
C클래스 하나(254대)를 한 부서가 다 쓰면 낭비고, 브로드캐스트가 전체에 퍼진다. 호스트 비트 일부를 빌려 네트워크 비트로 쓰면 작은 네트워크 여러 개로 나눌 수 있다.
만능 공식 4개
- 호스트 비트 수 h = 32 − 프리픽스
- 서브넷당 주소 수 = 2^h (= 블록 크기)
- 사용 가능 호스트 = 2^h − 2 (네트워크 주소·브로드캐스트 주소 제외)
- 네트워크 주소 = 블록 크기의 배수, 브로드캐스트 = 다음 네트워크 주소 − 1
마지막 옥텟 마스크 값 표 (외워 두면 빠르다)
| 프리픽스 | 마지막 옥텟 마스크 | 2진수 | 블록 크기 | 사용 가능 호스트 |
|---|---|---|---|---|
| /24 | 0 | 00000000 | 256 | 254 |
| /25 | 128 | 10000000 | 128 | 126 |
| /26 | 192 | 11000000 | 64 | 62 |
| /27 | 224 | 11100000 | 32 | 30 |
| /28 | 240 | 11110000 | 16 | 14 |
| /29 | 248 | 11111000 | 8 | 6 |
| /30 | 252 | 11111100 | 4 | 2 |
블록 크기 = 256 − 마스크 값 (예: 256 − 224 = 32).
예제 ① 192.168.1.0/24
- 마스크 255.255.255.0, h = 8, 주소 256개, 사용 가능 254개
- 네트워크 192.168.1.0, 브로드캐스트 192.168.1.255, 호스트 .1 ~ .254
예제 ② 192.168.1.0/26 — 4개로 나누기
- 마스크: /26 → 마지막 옥텟
11000000= 192 → 255.255.255.192 - h = 6 → 2^6 = 64개, 사용 가능 62개
- 네트워크 비트로 2비트를 빌렸으니 서브넷 2^2 = 4개
| 서브넷 | 네트워크 주소 | 사용 가능 범위 | 브로드캐스트 |
|---|---|---|---|
| 1 | 192.168.1.0 | .1 ~ .62 | .63 |
| 2 | 192.168.1.64 | .65 ~ .126 | .127 |
| 3 | 192.168.1.128 | .129 ~ .190 | .191 |
| 4 | 192.168.1.192 | .193 ~ .254 | .255 |
예제 ③ 192.168.10.77/27 — 이 호스트는 어느 네트워크인가 (2진수로)
77 = 0100 1101 (64 + 8 + 4 + 1)
/27 마스크 = 1110 0000 (= 224)
AND = 0100 0000 = 64 → 네트워크 주소 192.168.10.64
호스트 비트(뒤 5비트)를 모두 1로 → 0101 1111 = 95 → 브로드캐스트 192.168.10.95
사용 가능: 192.168.10.65 ~ 192.168.10.94 (30개)
빠른 방법: 블록 크기 32 → 32의 배수 0, 32, 64, 96... 중 77 이하 최대값 = 64. 다음 블록 96 − 1 = 95가 브로드캐스트.
예제 ④ 10.0.0.0/30 — 라우터 간 연결용
- 마스크 255.255.255.252, 주소 4개:
.0(네트워크) /.1.2(호스트) /.3(브로드캐스트) - 딱 2대만 연결하는 점대점(Point-to-Point) 링크에 쓴다. (/31을 점대점에 쓰는 표준(RFC 3021)도 있지만 시험에서는 보통 /30)
예제 ⑤ 조건으로 마스크 고르기
"한 서브넷에 호스트 50대가 필요하다" → 2^h − 2 ≥ 50 → h = 6 (62) → /26. h = 5면 30대뿐이라 부족.
예제 ⑥ (심화) B클래스 범위 172.16.35.123/20
/20 → 세 번째 옥텟에서 마스크 11110000 = 240 → 255.255.240.0
35 = 0010 0011
240 = 1111 0000
AND = 0010 0000 = 32 → 네트워크 172.16.32.0
블록 크기 16 → 다음 네트워크 172.16.48.0 → 브로드캐스트 172.16.47.255
호스트 수 2^12 − 2 = 4094
4-4. CIDR · VLSM · 경로 요약
- CIDR(Classless Inter-Domain Routing): 클래스 구분을 버리고
/숫자로 네트워크 길이를 자유롭게 표기. IP 낭비를 줄이고 라우팅 표를 줄이기 위해 도입. - VLSM(Variable Length Subnet Mask): 같은 네트워크 안에서 서브넷마다 다른 길이의 마스크를 써서 필요한 만큼만 할당.
VLSM 예: 192.168.1.0/24를 영업(100대), 개발(50대), 관리(20대), 라우터 링크 2개로 나누기 — 큰 것부터 배정한다.
| 용도 | 필요 | 프리픽스 | 할당 범위 |
|---|---|---|---|
| 영업 | 100 | /25 (126) | 192.168.1.0 ~ .127 |
| 개발 | 50 | /26 (62) | 192.168.1.128 ~ .191 |
| 관리 | 20 | /27 (30) | 192.168.1.192 ~ .223 |
| 링크1 | 2 | /30 (2) | 192.168.1.224 ~ .227 |
| 링크2 | 2 | /30 (2) | 192.168.1.228 ~ .231 |
- 경로 요약(Supernetting): 반대로 여러 네트워크를 하나로 묶는다.
192.168.0.0/24 ~ 192.168.3.0/24(4개) → 세 번째 옥텟 0~3은 앞 6비트가 같음(000000xx) → 192.168.0.0/22.
4-5. NAT / PAT — 사설 IP로 인터넷 나가기
사설 IP는 인터넷에서 쓸 수 없다. 공유기(라우터)가 나가는 패킷의 출발지 사설 IP를 공인 IP로 바꾸고, 돌아오는 응답을 다시 원래 사설 IP로 돌려준다. 이 변환 기록이 NAT 테이블이다.
| 종류 | 방식 | 예 |
|---|---|---|
| Static NAT | 사설 1개 ↔ 공인 1개 고정 | 내부 웹서버를 외부에 공개 |
| Dynamic NAT | 공인 IP 풀에서 남는 것을 그때그때 할당 | |
| PAT / NAPT (NAT Overload) | 공인 IP 1개를 포트 번호로 구분해 다수가 공유 | 가정용 공유기 |
| (포트 포워딩) | 공인IP:특정포트 → 내부IP:포트로 고정 전달 | 공유기 뒤 서버 공개 |
PAT 변환 테이블 예 (공인 IP 203.0.113.5 하나로 PC 2대가 같은 웹서버 접속)
| 내부 (사설IP:포트) | 변환 후 (공인IP:포트) | 목적지 |
|---|---|---|
| 192.168.0.10:51000 | 203.0.113.5:40001 | 198.51.100.80:443 |
| 192.168.0.11:51000 | 203.0.113.5:40002 | 198.51.100.80:443 |
두 PC의 내부 포트가 같아도, 바깥 포트를 다르게 붙여서 응답이 오면 표를 보고 정확히 되돌려준다.
[PC .10] ─┐ ┌──────────────┐
├─ 사설망 ─ [NAT 공유기] ──│ 인터넷 │── 웹서버
[PC .11] ─┘ 192.168.0.0/24 203.0.113.5 └──────────────┘
나갈 때: src 192.168.0.10:51000 → src 203.0.113.5:40001 로 변경
들어올 때: dst 203.0.113.5:40001 → dst 192.168.0.10:51000 로 복원
- 보안 효과: 내부 주소 구조를 숨기고, 외부에서 먼저 시작한 연결은 테이블에 없으니 기본적으로 들어오지 못한다. 단, NAT는 방화벽이 아니다(보안 장비를 대체하지 않음).
- 단점: 종단 간 통신 원칙을 깨고, IPSec AH처럼 IP 헤더 무결성을 검사하는 프로토콜과 충돌한다(NAT가 IP를 바꾸면 무결성 검증 실패 → NAT-T 등으로 우회).
4-6. IPv6 기초
IPv4 주소(약 43억 개) 고갈로 만든 차세대 IP. 128비트를 16비트씩 8그룹, 16진수로 쓴다.
축약 규칙
원래 : 2001:0db8:0000:0000:0000:ff00:0042:8329
① 각 그룹 앞자리 0 생략 → 2001:db8:0:0:0:ff00:42:8329
② 연속된 0 그룹을 :: 로 한 번만 → 2001:db8::ff00:42:8329
::는 주소에 한 번만 쓸 수 있다(두 번 쓰면 각각 몇 그룹인지 알 수 없음).
| 비교 | IPv4 | IPv6 |
|---|---|---|
| 주소 길이 | 32비트 | 128비트 |
| 표기 | 10진수 4옥텟 | 16진수 8그룹 |
| 헤더 | 20~60바이트 가변, 체크섬 있음 | 40바이트 고정, 헤더 체크섬 없음, 옵션은 확장 헤더로 |
| 단편화 | 라우터도 가능 | 출발지만 가능 (라우터는 안 함) |
| 주소 종류 | 유니·멀티·브로드캐스트 | 유니·멀티·애니캐스트 (브로드캐스트 없음) |
| MAC 찾기 | ARP | NDP(ICMPv6 Neighbor Solicitation/Advertisement) |
| 자동 설정 | DHCP | SLAAC(자동 설정) 또는 DHCPv6 |
| IPSec | 선택 | 초기 표준에서 구현 필수였으나 이후 권고로 완화 |
| TTL | TTL | Hop Limit |
| IPv6 주소 | 의미 |
|---|---|
::1 |
루프백 |
:: |
미지정 주소 |
fe80::/10 |
링크 로컬 (같은 링크에서만) |
fc00::/7 |
고유 로컬 (사설 IP와 비슷, ULA) |
2000::/3 |
글로벌 유니캐스트 |
ff00::/8 |
멀티캐스트 |
- 전환 기술: 듀얼 스택(둘 다 동시에), 터널링(IPv6를 IPv4 안에 담기: 6to4, ISATAP, Teredo), 변환(NAT64/DNS64).
- 보안 메모: IPv6를 쓰지 않는다고 생각한 망에서도 OS는 기본 활성화돼 있어 감시 사각지대가 될 수 있다. 터널은 방화벽 우회 통로가 될 수 있다.
⚠️ 시험 함정
- 사설 B 대역은 172.16 ~ 172.31. 172.32.x.x나 172.15.x.x는 공인이다.
- 사용 가능 호스트 = 2^h − 2. "/26 → 64대 사용 가능"(X, 62대).
- /30의 사용 가능 호스트는 2. 4라고 쓴 보기 주의.
- 127.0.0.1은 A클래스 범위지만 루프백 전용이라 A클래스 실사용 범위는 1~126.
- IPv6에는 브로드캐스트가 없다. 애니캐스트가 새로 생겼다.
- IPv6 헤더는 40바이트 고정이고 체크섬이 없다. "IPv6 헤더가 IPv4보다 복잡하다"(X, 단순화됨).
::는 한 번만.2001::db8::1은 잘못된 표기.- NAT는 보안 "효과"가 있을 뿐 방화벽 기능을 대신하지 않는다.
기출 포인트
- 서브넷 계산: 주어진 IP/프리픽스에서 네트워크 주소·브로드캐스트 주소·사용 가능 호스트 수를 구하거나, "같은 네트워크에 속하지 않는 IP"를 고르는 유형. 블록 크기 방식으로 30초 안에 풀 수 있게 연습한다.
- 사설 IP 범위: 보기 중 사설 IP가 아닌 것을 고르게 한다(172.32.x.x 같은 경계값 함정).
- NAT 종류 구분: Static/Dynamic/PAT의 설명을 섞어 놓고 매칭.
- IPv6 특징: 주소 길이, 브로드캐스트 부재, 헤더 단순화, 축약 표기의 옳고 그름.
확인 문제
Q1. 192.168.5.130/26이 속한 네트워크의 브로드캐스트 주소는?
① 192.168.5.127 ② 192.168.5.191 ③ 192.168.5.192 ④ 192.168.5.255
정답: ②
- /26 → 블록 크기 64 → 네트워크 0, 64, 128, 192. 130은 128 블록.
- 브로드캐스트 = 다음 네트워크(192) − 1 = 191.
- ① 틀림: 127은 64 블록의 브로드캐스트.
- ③ 틀림: 192는 다음 서브넷의 네트워크 주소.
- ④ 틀림: /24로 착각했을 때의 답.
Q2. 다음 중 사설 IP 주소가 아닌 것은?
① 10.200.1.1 ② 172.20.10.5 ③ 172.33.1.1 ④ 192.168.100.1
정답: ③
- ① 사설: 10.0.0.0/8.
- ② 사설: 172.16~172.31 안.
- ③ 공인: 172.33은 172.16.0.0/12 범위(172.16~172.31)를 벗어난다.
- ④ 사설: 192.168.0.0/16.
Q3. 한 서브넷에 최소 25대의 호스트를 연결해야 할 때 주소 낭비가 가장 적은 서브넷 마스크는?
① 255.255.255.192 ② 255.255.255.224 ③ 255.255.255.240 ④ 255.255.255.248
정답: ②
- ① /26: 62대 가능하지만 낭비가 크다.
- ② /27: 2^5 − 2 = 30대 ≥ 25. 조건을 만족하는 가장 작은 크기.
- ③ /28: 14대로 부족.
- ④ /29: 6대로 부족.
Q4. 공인 IP 하나를 여러 내부 호스트가 공유하며, 포트 번호로 각 연결을 구분하는 방식은?
① Static NAT ② Dynamic NAT ③ PAT(NAPT) ④ 프록시 ARP
정답: ③
- ① 틀림: 1:1 고정 변환.
- ② 틀림: 공인 IP 풀에서 1:1로 동적 할당. 풀이 소진되면 더 나갈 수 없다.
- ③ 맞음: 공인 IP:포트 조합으로 다수 공유.
- ④ 틀림: 라우터가 다른 네트워크 호스트 대신 ARP에 응답하는 기능으로 주소 변환과 무관.
Q5. IPv6에 대한 설명으로 옳지 않은 것은?
① 주소 길이는 128비트이다.
② 브로드캐스트 대신 멀티캐스트를 활용한다.
③ 기본 헤더에 헤더 체크섬 필드가 있어 라우터마다 재계산한다.
④ 이웃의 링크 계층 주소를 찾는 데 ARP 대신 NDP를 사용한다.
정답: ③
- ①②④ 옳음.
- ③ 틀림: IPv6 기본 헤더에는 체크섬이 없다. 오류 검출은 2계층과 상위 계층(TCP/UDP)에 맡겨 라우터 처리 부담을 줄였다.
Day 5 · 네트워크 장비 · VLAN · 진단 도구 · SMB/NetBIOS
5-1. 장비별 동작 원리
| 장비 | 계층 | 동작 | 충돌 도메인 | 브로드캐스트 도메인 | 보안 의미 |
|---|---|---|---|---|---|
| 리피터 | 1 | 약해진 신호 증폭 | 분리 안 함 | 분리 안 함 | |
| 허브 | 1 | 받은 신호를 모든 포트로 복사 | 전체가 하나 | 하나 | 꽂기만 하면 남의 트래픽 보임 → 스니핑 쉬움 |
| 브리지 | 2 | MAC 보고 구간 전달 (스위치의 원형) | 포트별 분리 | 하나 | |
| 스위치 | 2 | MAC 주소 테이블을 보고 해당 포트로만 전달 | 포트별 분리 | 하나(VLAN 없으면) | 스니핑하려면 MAC Flooding·ARP 스푸핑·포트 미러링 필요 |
| 라우터 | 3 | 라우팅 테이블로 다른 네트워크에 전달 | 분리 | 분리 | ACL로 패킷 필터링 |
| L3 스위치 | 3 | 스위치 + 라우팅 | 분리 | ||
| L4 스위치 | 4 | IP+포트 기반 부하분산(로드밸런싱) | 서버 부하 분산, 일부 DoS 완화 | ||
| L7 스위치 | 7 | URL·쿠키 등 내용 기반 분산 | 콘텐츠 필터링 | ||
| 게이트웨이 | 주로 3 이상 | 서로 다른 네트워크·프로토콜 연결 | 기본 게이트웨이 = 밖으로 나가는 출구 라우터 |
- 충돌 도메인: 동시에 신호를 보내면 충돌하는 범위. 브로드캐스트 도메인: 브로드캐스트(ARP 요청 등)가 퍼지는 범위.
- 브로드캐스트 도메인을 나누는 것 = 라우터, VLAN.
스위치의 MAC 학습 과정
- 프레임이 들어오면 출발지 MAC + 들어온 포트를 MAC 테이블에 기록(학습, Learning)
- 목적지 MAC이 테이블에 있으면 그 포트로만 전달(Forwarding)
- 없으면 들어온 포트 빼고 모든 포트로 보냄(Flooding)
- 일정 시간 안 쓰인 항목은 지움(Aging)
위조된 출발지 MAC으로 프레임을 대량 보내 MAC 테이블을 가득 채우면, 새 항목을 못 배우는 스위치가 3번(Flooding) 상태처럼 동작해 허브처럼 모든 포트로 뿌린다 → 스니핑 가능. 대응: 포트 보안(Port Security) 으로 포트당 MAC 개수 제한. → Week07_네트워크 보안
포트 미러링(SPAN): 스위치의 특정 포트 트래픽을 복사해 다른 포트로 보내는 기능. IDS·패킷 분석 장비를 연결할 때 정상적으로 쓴다. (TAP 장비로 회선에서 복사하는 방식도 있다)
5-2. VLAN — 스위치 하나를 여러 네트워크처럼
VLAN(Virtual LAN) 은 물리적으로 같은 스위치에 꽂혀 있어도 논리적으로 다른 네트워크로 나누는 기술이다. 같은 층에 있어도 인사팀과 개발팀을 분리할 수 있다. VLAN이 다르면 브로드캐스트가 서로 닿지 않고, 통신하려면 라우터(L3 장비)를 거쳐야 한다 → 그 지점에서 접근 통제가 가능.
┌────────────── 스위치 ──────────────┐
│ 포트1 포트2 │ 포트3 포트4 │ 포트24(Trunk) ──▶ 다른 스위치/라우터
│ VLAN10 VLAN10 │ VLAN20 VLAN20 │ (802.1Q 태그로 VLAN 구분)
└───────────────┴────────────────┴─────
인사팀 PC 개발팀 PC
VLAN10 ↔ VLAN20 직접 통신 불가 → 라우터/L3 스위치 경유 + ACL
- Access 포트: 하나의 VLAN에만 속함 (PC 연결)
- Trunk 포트: 여러 VLAN 프레임을 함께 운반, IEEE 802.1Q 태그(4바이트, 그중 VLAN ID 12비트 → 0~4095, 실사용 1~4094)로 구분
- 공격: VLAN Hopping(스위치 스푸핑으로 트렁크 협상, 이중 태깅) → 대응: 사용하지 않는 포트의 자동 트렁크 협상(DTP) 비활성화, 네이티브 VLAN을 사용하지 않는 번호로 변경.
5-3. 진단 명령어 — 출력 읽기
ping
$ ping -c 3 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.512 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=0.498 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=0.530 ms
--- 192.168.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.498/0.513/0.530/0.013 ms
56(84): 데이터 56바이트 + ICMP 헤더 8 + IP 헤더 20 = 84바이트64 bytes: 응답 = 데이터 56 + ICMP 헤더 8ttl=64: 응답 패킷의 남은 TTL. 64나 128 근처면 상대 OS를 짐작하는 단서(설정으로 바꿀 수 있어 확정은 못 함)time: 왕복 시간(RTT)- 리눅스
ping은 Ctrl+C 전까지 계속,-c로 횟수 지정. Windows는 기본 4회,-t로 무한. - 응답이 없다고 꼭 꺼진 건 아니다 → 방화벽이 ICMP를 막았을 수 있다.
traceroute / tracert
$ traceroute -n 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 192.168.0.1 0.521 ms 0.480 ms 0.466 ms
2 10.10.0.1 3.112 ms 3.090 ms 3.201 ms
3 * * *
4 203.0.113.1 8.774 ms 8.650 ms 8.702 ms
...
- 각 줄 = 한 홉(라우터). 시간 3개 = 3번 시도한 RTT
* * *: 그 라우터가 ICMP Time Exceeded를 보내지 않거나 차단 (경로가 끊긴 건 아닐 수 있음)- Windows
tracert는 ICMP Echo 기반, 리눅스traceroute -I로 ICMP,-T로 TCP SYN 방식도 가능
netstat / ss — 열린 포트와 연결 상태
$ netstat -antp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 812/sshd
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 930/mysqld
tcp 0 0 192.168.0.10:22 192.168.0.5:51234 ESTABLISHED 2201/sshd: user1
tcp 0 0 192.168.0.10:80 198.51.100.7:40112 SYN_RECV -
tcp 0 0 192.168.0.10:44120 203.0.113.66:4444 ESTABLISHED 3310/bash
- 옵션:
-a모든 소켓,-n숫자로,-tTCP,-uUDP,-p프로세스(root 필요),-lLISTEN만,-r라우팅 테이블 0.0.0.0:22 LISTEN: 모든 인터페이스에서 SSH 대기127.0.0.1:3306: 자기 자신에서만 접속 가능한 MySQL (외부 노출 안 됨 → 바람직)SYN_RECV: handshake 미완료. 대량이면 SYN Flooding- 마지막 줄: bash가 외부 4444 포트로 연결 → 리버스 셸(백도어) 의심 패턴
- 최신 리눅스는
ss -antp가 netstat를 대체. Windows는netstat -ano(o = PID 표시) 후tasklist로 PID 확인
tcpdump — CLI 패킷 캡처
| 예 | 의미 |
|---|---|
tcpdump -i eth0 |
eth0 인터페이스 캡처 |
tcpdump -n host 192.168.0.5 |
해당 IP 관련만 |
tcpdump -n src 10.0.0.1 and dst port 80 |
출발지·목적지 포트 조합 |
tcpdump -n net 192.168.0.0/24 |
네트워크 대역 |
tcpdump -n icmp / arp / udp port 53 |
프로토콜별 |
tcpdump -w cap.pcap / -r cap.pcap |
파일로 저장 / 파일 읽기 (Wireshark에서 열 수 있음) |
tcpdump -X / -A |
내용을 16진수+ASCII / ASCII로 출력 (평문 비밀번호가 보이는 이유) |
tcpdump 'tcp[tcpflags] & tcp-syn != 0' |
SYN 플래그가 켜진 패킷만 |
Wireshark — GUI 패킷 분석 (2027 출제기준 명시)
Wireshark는 캡처한 패킷을 계층별로 펼쳐 보여주는 분석 도구다. 필터가 두 종류라는 점이 핵심이다.
| 구분 | 캡처 필터 | 디스플레이(표시) 필터 |
|---|---|---|
| 적용 시점 | 캡처 전 (안 맞는 건 저장 안 함) | 캡처 후 (보여주기만 걸러냄) |
| 문법 | BPF(tcpdump와 같음) | Wireshark 고유 문법 |
| 예 | host 10.0.0.5 and port 80 |
ip.addr == 10.0.0.5 && tcp.port == 80 |
자주 쓰는 디스플레이 필터
| 필터 | 의미 |
|---|---|
ip.addr == 192.168.0.5 |
출발지 또는 목적지가 해당 IP |
ip.src == 10.0.0.1 / ip.dst == ... |
출발지 / 목적지 지정 |
tcp.port == 443 / udp.port == 53 |
포트 |
tcp.flags.syn == 1 && tcp.flags.ack == 0 |
SYN만 켜진 패킷 (연결 시도, SYN 스캔·Flooding 탐지) |
tcp.flags.reset == 1 |
RST 패킷 (닫힌 포트 응답 다수 → 스캔 흔적) |
http.request.method == "POST" |
HTTP POST 요청 (로그인 폼 전송 확인) |
dns / arp / icmp |
프로토콜별 |
icmp.type == 8 |
Echo Request |
arp.opcode == 2 |
ARP Reply (스푸핑 분석) |
!(arp or dns) |
ARP·DNS 제외 |
frame contains "password" |
내용에 문자열 포함 |
- 주요 기능: Follow TCP Stream(한 연결의 대화 내용을 이어서 보기 — 평문 프로토콜이면 ID/PW가 그대로 보임), Statistics → Conversations / Protocol Hierarchy, Export Objects(HTTP로 오간 파일 추출).
- 비교 연산자는
==,!=,>,contains, 논리는&&(and),||(or),!(not).
5-4. SMB · NetBIOS — 윈도우 파일 공유
NetBIOS는 원래 소규모 LAN에서 컴퓨터 이름으로 서로 찾고 통신하던 API다. 지금은 TCP/IP 위에서 동작하는 NBT(NetBIOS over TCP/IP) 형태로 남아 있다.
| 포트 | 프로토콜 | 기능 |
|---|---|---|
| 137 | UDP | NetBIOS 이름 서비스 (이름 → IP) |
| 138 | UDP | NetBIOS 데이터그램 서비스 |
| 139 | TCP | NetBIOS 세션 서비스 (그 위에서 SMB 동작) |
| 445 | TCP | SMB Direct — NetBIOS 없이 TCP 위에서 바로 SMB |
SMB(Server Message Block) 는 윈도우의 파일·프린터 공유 프로토콜이다(리눅스에서는 Samba로 구현, 옛 이름 CIFS).
| 버전 | 특징 |
|---|---|
| SMBv1 | 오래되고 취약. MS17-010(EternalBlue) 원격 코드 실행 취약점 → 2017년 워너크라이 랜섬웨어 전파 → 비활성화 권고 |
| SMBv2 | 성능 개선, 명령 단순화 |
| SMBv3 | 암호화 지원(SMB Encryption), 서명 강화 |
- 보안 조치: SMBv1 끄기, 인터넷 경계에서 139/445 차단, SMB 서명 사용, 불필요한 공유 제거, 패치.
nbtstat -A <IP>(Windows): 원격 호스트의 NetBIOS 이름 테이블 조회 → 공격자 정보 수집에 쓰임.- 윈도우 기본 공유(C
, IPC$)와 널 세션은 Week02_운영체제 기초에서 다룬다.
⚠️ 시험 함정
- 스위치도 브로드캐스트는 모든 포트로 보낸다. 브로드캐스트 도메인을 나누는 건 라우터/VLAN.
- 허브는 충돌 도메인도 하나. 스위치는 포트마다 충돌 도메인이 분리된다.
- L4 스위치는 포트 번호 기반, L7 스위치는 내용(URL 등) 기반. 바꿔 쓴 보기.
- Wireshark 캡처 필터는 BPF 문법, 디스플레이 필터는
ip.addr ==같은 고유 문법. "ip.addr == x를 캡처 필터에 쓴다"(X). - 139는 NetBIOS 세션(TCP), 445는 SMB Direct(TCP). 137·138은 UDP.
- traceroute의
* * *는 "경로 끊김"이 아니라 "응답 없음"(차단 가능성).
기출 포인트
- 장비와 계층/기능 매칭: "MAC 주소 테이블을 사용하는 장비", "브로드캐스트 도메인을 분리하는 장비"를 고르게 한다.
- VLAN 목적: 브로드캐스트 도메인 분리, 보안 영역 분리. 802.1Q 태그 개념.
- 명령어 결과 해석:
netstat출력에서 상태(LISTEN, ESTABLISHED, SYN_RECV)의 의미나 의심스러운 연결을 찾게 하는 유형,ping의 TTL로 OS 추정. - Wireshark 필터: 2027 출제기준에 명시되어 출제 가능성이 높다. "SYN 패킷만 보려면 어떤 필터?", 캡처/디스플레이 필터 구분이 예상된다.
- SMB/NetBIOS: 포트 번호와 워너크라이(SMBv1 취약점) 연결.
확인 문제
Q1. 스위치에 대한 설명으로 옳지 않은 것은?
① 수신 프레임의 출발지 MAC 주소로 MAC 주소 테이블을 학습한다.
② 목적지 MAC이 테이블에 없으면 수신 포트를 제외한 모든 포트로 전달한다.
③ 기본 설정에서 포트마다 브로드캐스트 도메인이 분리된다.
④ MAC 테이블이 가득 차면 허브처럼 동작할 수 있어 스니핑에 악용된다.
정답: ③
- ①② 옳음: 학습(Learning)과 플러딩(Flooding).
- ③ 틀림: 스위치가 포트별로 나누는 건 충돌 도메인. 브로드캐스트 도메인은 VLAN 없이는 하나다.
- ④ 옳음: 스위치 재밍(MAC Flooding)의 원리.
Q2. Wireshark에서 TCP 연결 요청(SYN만 설정, ACK 미설정) 패킷만 표시하는 디스플레이 필터는?
① tcp.flags.syn == 1 && tcp.flags.ack == 0
② tcp.flags.syn == 1 && tcp.flags.ack == 1
③ tcp port syn
④ host syn and not ack
정답: ①
- ① 맞음.
- ② 틀림: SYN+ACK, 즉 서버의 응답 패킷이다.
- ③④ 틀림: Wireshark 디스플레이 필터 문법이 아니다(BPF 비슷하게 꾸민 함정 보기).
Q3. 다음 netstat -antp 결과 중 침해 의심도가 가장 높은 줄은?
① tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 812/sshd
② tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 930/mysqld
③ tcp 0 0 192.168.0.10:44120 203.0.113.66:4444 ESTABLISHED 3310/bash
④ tcp 0 0 192.168.0.10:22 192.168.0.5:51234 ESTABLISHED 2201/sshd
정답: ③
- ① 정상: SSH 서버 대기.
- ② 정상: DB가 로컬에서만 대기(오히려 바람직한 설정).
- ③ 의심: 셸(bash)이 직접 외부 IP의 특이 포트로 연결되어 있다. 리버스 셸의 전형적 모습.
- ④ 정상: 내부 PC에서 SSH 접속 중.
Q4. 브로드캐스트 도메인을 분리할 수 있는 것으로만 묶인 것은?
① 허브, 리피터 ② 스위치(VLAN 미사용), 브리지 ③ 라우터, VLAN ④ 리피터, 브리지
정답: ③
- ① 틀림: 1계층 장비는 아무것도 분리하지 않는다.
- ② 틀림: 2계층 장비는 충돌 도메인만 분리.
- ③ 맞음: 라우터는 브로드캐스트를 넘기지 않고, VLAN은 논리적으로 분리.
- ④ 틀림: 리피터는 분리 없음, 브리지는 충돌 도메인만.
Q5. 2017년 워너크라이 랜섬웨어가 전파에 악용한 서비스와 포트는?
① RDP - TCP 3389 ② SMBv1 - TCP 445 ③ NetBIOS 이름 서비스 - UDP 137 ④ Telnet - TCP 23
정답: ②
- ② 맞음: SMBv1의 MS17-010(EternalBlue) 취약점을 이용해 445 포트로 자가 전파했다.
- ① 틀림: RDP는 BlueKeep(2019) 등 별도 취약점으로 유명하다.
- ③ 틀림: 이름 조회용으로 워너크라이의 감염 경로가 아니다.
- ④ 틀림: Telnet은 IoT 봇넷(Mirai 등)의 무차별 대입 경로로 유명하다.
Day 6 · 무선 네트워크 보안 · 802.1X · SDN
6-1. 무선랜이 유선보다 위험한 이유
유선은 케이블에 물리적으로 접근해야 도청할 수 있지만, 무선(IEEE 802.11, Wi-Fi)은 전파가 벽 밖까지 퍼진다. 건물 밖 주차장에서도 신호를 잡을 수 있다. 그래서 무선 보안의 핵심은 두 가지다.
- 인증: 허락된 사람만 AP(Access Point, 무선 공유기)에 붙게 한다.
- 암호화: 공중에 떠다니는 프레임을 잡아도 내용을 못 읽게 한다.
기본 용어
- SSID: 무선 네트워크 이름. BSSID: AP의 MAC 주소.
- 비콘(Beacon): AP가 "여기 이런 네트워크 있어요"라고 주기적으로 알리는 프레임.
- 모니터 모드: 무선 NIC가 AP에 연결하지 않고 주변 모든 802.11 프레임을 수집하는 모드.
6-2. 무선 보안 규격의 진화
WEP (1999) ──▶ WPA (2003) ──▶ WPA2 (2004, 802.11i) ──▶ WPA3 (2018)
RC4+24bit IV TKIP(RC4 개선) AES-CCMP SAE, GCMP-256(엔터프라이즈 192bit)
"깨짐" "임시 땜질" "현재 표준" "차세대"
| 규격 | 암호화 | 무결성 | 키 관리/인증 | 약점 |
|---|---|---|---|---|
| WEP | RC4 + 24비트 IV | CRC-32 (암호학적 무결성 아님) | 고정 공유키 | IV가 짧아 재사용 → 패킷 수집만으로 키 복구. 사용 금지 |
| WPA | TKIP (여전히 RC4, 패킷마다 키 혼합) | MIC(Michael) | PSK 또는 802.1X | WEP 하드웨어에서 돌리려고 만든 과도기 규격. 현재 비권장 |
| WPA2 | AES-CCMP | CCMP에 포함 | PSK(Personal) / 802.1X(Enterprise), 4-way handshake로 세션키 생성 | PSK 사용 시 handshake를 잡아 오프라인 사전 공격 가능, KRACK(2017, 패치로 해결) |
| WPA3 | AES-CCMP(Personal) / GCMP-256(Enterprise 192비트 모드) | 포함 | SAE(Dragonfly) — PSK 대체 | SAE 덕분에 오프라인 사전 공격 어려움, 전방향 안전성, PMF(관리 프레임 보호) 필수 |
- WPA3 SAE: 비밀번호를 직접 주고받지 않는 키 교환이라, 캡처한 데이터로 비밀번호를 오프라인 대입할 수 없고, 나중에 비밀번호가 노출돼도 과거 트래픽은 복호화되지 않는다(Forward Secrecy).
- OWE(Enhanced Open): 카페처럼 비밀번호 없는 공개 Wi-Fi에서도 각 사용자 트래픽을 암호화하는 기술(Wi-Fi Alliance 인증명).
- PMF(802.11w): Deauthentication 같은 관리 프레임을 보호 → 강제 연결 끊기 공격 방어.
6-3. Personal(PSK) vs Enterprise(802.1X)
| 구분 | Personal (PSK / SAE) | Enterprise (802.1X) |
|---|---|---|
| 인증 수단 | 모두가 같은 비밀번호 | 사용자별 계정 또는 인증서 |
| 인증 서버 | 없음 (AP가 처리) | RADIUS 서버 |
| 퇴사자 처리 | 비밀번호를 바꿔 전원 재설정 | 해당 계정만 비활성화 |
| 용도 | 가정, 소규모 | 기업 |
6-4. IEEE 802.1X — 포트 기반 접근 통제
802.1X는 무선뿐 아니라 유선 스위치 포트에도 쓰는 "인증받기 전엔 네트워크 문을 안 열어주는" 표준이다. 인증 전에는 EAP 인증 트래픽만 통과시킨다.
| 구성요소 | 역할 | 예 |
|---|---|---|
| Supplicant(신청자) | 접속하려는 단말 | 노트북, 스마트폰 |
| Authenticator(인증자) | 문지기. 인증 결과에 따라 포트를 열고 닫음 | AP, 스위치 |
| Authentication Server(인증 서버) | 실제로 계정·인증서를 검증 | RADIUS 서버 |
sequenceDiagram
participant S as Supplicant (노트북)
participant A as Authenticator (AP/스위치)
participant R as 인증 서버 (RADIUS)
S->>A: 연결 시도 (EAPOL-Start)
A->>S: EAP-Request/Identity (누구세요?)
S->>A: EAP-Response/Identity (user1)
A->>R: RADIUS Access-Request (EAP 메시지 전달)
R-->>S: (A를 거쳐) EAP 인증 교환 - 예 TLS 인증서 검증
R->>A: RADIUS Access-Accept (+ 키 정보)
A->>S: EAP-Success, 포트 열림 (이후 4-way handshake로 암호키 생성)- 단말 ↔ AP 구간: EAPOL(EAP over LAN), AP ↔ 인증 서버 구간: RADIUS(UDP 1812)
- EAP 방식 비교
| EAP 방식 | 인증 | 평가 |
|---|---|---|
| EAP-TLS | 서버·클라이언트 양쪽 인증서 | 가장 안전, 인증서 배포 부담 |
| PEAP | 서버 인증서로 TLS 터널 → 그 안에서 ID/PW(MS-CHAPv2) | 기업에서 널리 사용 |
| EAP-TTLS | PEAP와 유사(터널 + 다양한 내부 인증) | |
| EAP-MD5 | 해시 기반 ID/PW, 상호 인증 X | 취약 |
| LEAP | 시스코 구형 | 취약 |
6-5. 무선 공격과 보조 대책
| 공격 | 내용 |
|---|---|
| War Driving | 차량 등으로 이동하며 취약한 AP 탐색 |
| Rogue AP | 허가받지 않은 AP를 내부망에 몰래 연결 → 외부에서 내부망 진입 통로 |
| Evil Twin | 정상 AP와 같은 SSID의 가짜 AP로 사용자를 유인 → 중간자 공격 |
| Deauthentication | 위조한 연결 해제 프레임으로 강제로 끊기 → 재연결 때 handshake 캡처, 서비스 거부 |
| WEP 크래킹 | IV 수집 후 키 복구 |
| WPA2-PSK 사전 공격 | 4-way handshake 캡처 후 오프라인 대입 |
보조 대책은 "보조"일 뿐
- SSID 숨김: 비콘에서 이름을 빼도, 접속하는 단말의 프로브/연결 프레임에 SSID가 드러난다.
- MAC 필터링: 정상 단말의 MAC을 스니핑해 바꾸면 우회된다.
- 실질적 대책: WPA2-Enterprise/WPA3, 강한 PSK, PMF, 무선 침입방지시스템(WIPS)으로 Rogue AP·Evil Twin 탐지, 관리자 페이지 기본 비밀번호 변경, WPS(PIN 방식) 비활성화.
6-6. SDN — 네트워크를 소프트웨어로 제어 (2027 출제기준 추가)
전통적인 라우터·스위치는 장비마다 두뇌(제어)와 손발(전달) 이 한 몸에 있다. 정책을 바꾸려면 장비 수백 대에 하나씩 접속해 설정해야 한다.
SDN(Software Defined Networking) 은 두뇌를 떼어내 중앙 컨트롤러에 모으고, 장비는 "시키는 대로 전달만" 하게 만든다.
┌────────────── 응용 계층 ──────────────┐
│ 방화벽 앱 · 부하분산 앱 · 모니터링 앱 │
└──────────────────┬───────────────────┘
Northbound API (REST 등)
┌──────────────────┴───────────────────┐
│ SDN 컨트롤러 (제어 평면) │ ← 네트워크 전체를 보는 "두뇌"
└──────────────────┬───────────────────┘
Southbound API (대표: OpenFlow)
┌──────────────┬────────┴─────┬──────────────┐
[스위치] [스위치] [스위치] ← 데이터 평면: 플로우 테이블대로 전달만
| 용어 | 의미 |
|---|---|
| 제어 평면(Control Plane) | 경로·정책을 결정하는 부분 → 컨트롤러 |
| 데이터 평면(Data Plane) | 실제 패킷을 전달하는 부분 → 스위치 |
| Southbound API | 컨트롤러 ↔ 스위치. OpenFlow가 대표 |
| Northbound API | 응용 ↔ 컨트롤러 |
| 플로우 테이블 | "이런 패킷(Match)이면 이렇게(Action: 전달/폐기/컨트롤러로 보냄)" 규칙 + 통계(Counter) |
- 보안 장점: 정책을 중앙에서 한 번에 적용, 이상 트래픽 발견 시 해당 호스트를 즉시 격리, 네트워크 전체 가시성.
- 보안 위험: 컨트롤러가 단일 장애점(SPOF) 이자 최고 가치 표적, 컨트롤러-스위치 통신 위조(→ TLS로 보호), 새 플로우마다 컨트롤러에 문의하는 구조를 노린 플로우 테이블 고갈·컨트롤러 DoS.
- NFV(Network Function Virtualization) 와 구분: NFV는 방화벽·라우터 같은 기능을 전용 장비 대신 일반 서버의 소프트웨어(가상 머신) 로 돌리는 것. SDN은 제어 구조를 바꾸는 것. 함께 쓰이는 경우가 많다.
- 클라우드 보안 모델(SASE, ZTNA 등)과의 연결은 Week07_네트워크 보안에서 다룬다.
⚠️ 시험 함정
- WEP와 TKIP(WPA)는 둘 다 RC4 기반. "WPA는 AES를 필수로 사용"(X) — AES-CCMP 필수는 WPA2.
- WPA3 Personal의 핵심은 SAE. "WPA3는 PSK 4-way handshake를 그대로 쓴다"(X).
- 802.1X의 3요소 이름: Supplicant / Authenticator / Authentication Server. AP는 인증 서버가 아니라 인증자.
- SSID 숨김·MAC 필터링을 "충분한 보안 대책"으로 서술한 보기는 틀림.
- SDN에서 OpenFlow는 Southbound 인터페이스. Northbound로 바꿔 놓은 보기 주의.
- SDN = 제어/데이터 평면 분리, NFV = 네트워크 기능 가상화. 정의를 바꿔 놓은 보기.
기출 포인트
- 무선 규격 매칭: WEP/WPA/WPA2/WPA3와 암호 알고리즘(RC4, TKIP, AES-CCMP, SAE)을 연결.
- WEP 취약 이유: 짧은 IV(24비트) 재사용, 고정 키, CRC-32 무결성 한계를 서술형 보기로 묻는다.
- 802.1X 구성요소와 RADIUS: "무선 기업망에서 사용자별 인증을 제공하는 구성"을 고르게 한다.
- 무선 공격 용어: Rogue AP, Evil Twin, War Driving 정의 매칭.
- SDN(신규): 제어 평면/데이터 평면 분리, OpenFlow, 컨트롤러의 보안 위협을 묻는 개념 문제가 예상된다.
확인 문제
Q1. 무선 보안 규격과 암호화 방식의 연결로 옳은 것은?
① WEP - AES ② WPA - TKIP ③ WPA2 - RC4 ④ WPA3 - DES
정답: ②
- ① 틀림: WEP는 RC4.
- ② 맞음: WPA는 TKIP(RC4 기반 개선).
- ③ 틀림: WPA2는 AES-CCMP.
- ④ 틀림: WPA3는 SAE + AES(CCMP/GCMP). DES는 쓰지 않는다.
Q2. IEEE 802.1X 구성요소에 대한 설명으로 옳은 것은?
① Supplicant는 사용자 인증 정보를 검증하는 서버이다.
② Authenticator는 인증 결과에 따라 포트 접근을 허용·차단하는 AP나 스위치이다.
③ Authentication Server는 접속을 요청하는 단말이다.
④ 단말과 AP 사이에서는 RADIUS 프로토콜로 EAP를 전달한다.
정답: ②
- ① 틀림: Supplicant는 접속을 요청하는 단말.
- ② 맞음.
- ③ 틀림: Authentication Server는 RADIUS 등 검증 서버.
- ④ 틀림: 단말↔AP는 EAPOL, AP↔인증 서버가 RADIUS.
Q3. WEP가 취약한 이유로 거리가 먼 것은?
① 24비트 IV가 짧아 재사용이 발생한다.
② 무결성 검사에 CRC-32를 사용한다.
③ 모든 사용자가 같은 고정 키를 공유한다.
④ 키 교환에 SAE 방식을 사용하여 전방향 안전성이 없다.
정답: ④
- ①②③ 모두 실제 WEP 약점.
- ④ 틀림: SAE는 WPA3의 방식이며, 오히려 전방향 안전성을 제공한다.
Q4. 정상 AP와 동일한 SSID를 사용하는 가짜 AP를 설치하여 사용자 접속을 유도하는 공격은?
① War Driving ② Evil Twin ③ Deauthentication ④ MAC Flooding
정답: ②
- ① 틀림: 이동하며 AP를 탐색하는 행위.
- ② 맞음.
- ③ 틀림: 연결 해제 프레임을 위조해 끊는 공격(Evil Twin 유도 전 단계로 쓰이기도 한다).
- ④ 틀림: 유선 스위치의 MAC 테이블을 넘치게 하는 공격.
Q5. SDN에 대한 설명으로 옳지 않은 것은?
① 제어 평면과 데이터 평면을 분리한다.
② 중앙 컨트롤러가 네트워크 정책을 일괄 관리한다.
③ OpenFlow는 응용 프로그램과 컨트롤러 사이의 Northbound 인터페이스이다.
④ 컨트롤러가 단일 장애점이 될 수 있어 보호가 중요하다.
정답: ③
- ①②④ 옳음.
- ③ 틀림: OpenFlow는 컨트롤러와 스위치 사이의 Southbound 인터페이스다.
Day 7 · 주간 정리
이번 주 한 장 정리 (마인드맵)
- 계층 모델
- OSI: 물·데·네·전·세·표·응 / PDU: 비트 → 프레임 → 패킷 → 세그먼트 → 데이터
- TCP/IP 4계층: 네트워크 접근 / 인터넷 / 전송 / 응용
- 캡슐화(헤더 붙이기) ↔ 역캡슐화 / 위 계층 식별: EtherType → Protocol → Port
- 2계층
- MAC 48비트(OUI 24 + 일련 24), 브로드캐스트 FF:FF:FF:FF:FF:FF, MTU 1500
- ARP: Request 브로드캐스트 / Reply 유니캐스트 / 캐시 / 인증 없음 → 스푸핑
- 스위치: 학습·전달·플러딩·에이징 / MAC Flooding → 허브처럼
- VLAN: 브로드캐스트 도메인 분리, 802.1Q 태그(VLAN ID 12비트)
- 3계층
- IP 헤더: TTL(라우터마다 −1), Protocol(1/6/17), Flags(DF/MF), Offset(8바이트 단위)
- 단편화 → Teardrop(겹침), Tiny Fragment / 65,535 초과 → Ping of Death
- ICMP: 0 Reply, 3 Unreachable, 5 Redirect, 8 Request, 11 Time Exceeded / 포트 없음
- 주소: 클래스 A/B/C/D/E, 사설 10/8 · 172.16/12 · 192.168/16, 루프백 127, APIPA 169.254
- 서브넷: 블록 크기 = 256 − 마스크, 호스트 = 2^h − 2 / CIDR, VLSM, 요약
- NAT: Static, Dynamic, PAT(포트로 공유)
- IPv6: 128비트, 브로드캐스트 없음, 40바이트 고정 헤더, NDP, SLAAC
- 4계층
- TCP: U-A-P-R-S-F, 3-way(SYN → SYN+ACK → ACK), 4-way(FIN/ACK ×2), TIME_WAIT은 먼저 끊은 쪽
- SYN Flooding → SYN_RECEIVED 급증 → SYN Cookie
- UDP: 8바이트 헤더, 비연결 → 위조 쉬움 → 반사·증폭 DDoS
- 포트: Well-known 0~1023 / 핵심 포트 표
- 응용 서비스
- DNS: hosts → 캐시 → 리졸버(재귀) → 루트/TLD/권한(반복), 레코드 A/AAAA/CNAME/MX/NS/PTR, 존 전송 TCP 53
- DHCP: DORA, 67/68, Snooping
- SMB 445 / NetBIOS 137~139, SMBv1 → 워너크라이
- 도구: ping, traceroute(리눅스 UDP / 윈도우 ICMP), netstat/ss, arp, nslookup/dig, tcpdump(BPF), Wireshark(캡처 필터 BPF / 디스플레이 필터)
- 무선·신기술
- WEP(RC4, IV) → WPA(TKIP) → WPA2(AES-CCMP) → WPA3(SAE, PMF)
- 802.1X: Supplicant / Authenticator / RADIUS, EAP-TLS·PEAP
- SDN: 제어/데이터 평면 분리, OpenFlow = Southbound
미니 모의고사 (15문항)
M1. 라우터가 패킷 전달 경로를 결정할 때 주로 참조하는 정보는?
① 목적지 MAC 주소 ② 목적지 IP 주소 ③ 목적지 포트 번호 ④ TCP 순서번호
정답: ② — 라우터는 3계층 장비로 목적지 IP를 라우팅 테이블과 비교한다. ① MAC은 스위치가 참조, ③ 포트는 L4 장비·방화벽, ④ 순서번호는 종단 호스트의 TCP가 사용.
M2. 다음 중 OSI 2계층에서 동작하는 것으로 짝지어진 것은?
① 허브, 리피터 ② 스위치, 브리지 ③ 라우터, L3 스위치 ④ L4 스위치, 프록시
정답: ② — ① 1계층, ③ 3계층, ④ 4계층과 7계층.
M3. TCP 플래그 중 연결을 즉시 강제로 끊을 때 사용하는 것은?
① FIN ② PSH ③ RST ④ URG
정답: ③ — ① FIN은 정상 종료 절차, ② PSH는 즉시 전달, ④ URG는 긴급 데이터.
M4. UDP에 대한 설명으로 옳은 것은?
① 3-way handshake로 연결을 수립한다.
② 헤더 크기는 20바이트이다.
③ 출발지 IP 위조가 쉬워 반사형 DDoS에 자주 악용된다.
④ 슬라이딩 윈도우로 흐름 제어를 한다.
정답: ③ — ① 연결 수립 없음, ② UDP 헤더는 8바이트(20은 TCP 기본), ④ 흐름 제어는 TCP 기능.
M5. traceroute(리눅스 기본 동작)의 원리로 옳은 것은?
① ICMP Echo Request의 TTL을 255로 고정하여 보낸다.
② TTL을 1부터 증가시키며 각 라우터가 돌려주는 ICMP Time Exceeded로 경로를 파악한다.
③ ARP Request를 경로상 라우터마다 브로드캐스트한다.
④ TCP RST 응답의 순서번호로 홉 수를 계산한다.
정답: ② — 리눅스는 UDP 패킷을 TTL 1, 2, 3...으로 보내고 Type 11 응답을 수집하며, 목적지에서는 Port Unreachable로 끝을 안다. ① TTL을 고정하면 경로를 알 수 없다. ③ ARP는 라우터를 넘지 못한다. ④ 사실과 다르다.
M6. 172.16.10.200/28의 네트워크 주소는?
① 172.16.10.192 ② 172.16.10.200 ③ 172.16.10.207 ④ 172.16.10.208
정답: ① — /28 → 블록 16. 16의 배수 중 200 이하 최대값은 192. ③ 207은 브로드캐스트, ④ 208은 다음 네트워크, ② 200은 호스트 자신.
M7. /30 서브넷에서 사용 가능한 호스트 수는?
① 1 ② 2 ③ 4 ④ 6
정답: ② — 2^2 − 2 = 2. ③ 4는 전체 주소 수, ④ 6은 /29.
M8. DNS에 대한 설명으로 옳지 않은 것은?
① MX 레코드는 메일 서버를 지정한다.
② PTR 레코드는 IP 주소로 도메인 이름을 찾는 역방향 조회에 쓰인다.
③ 존 전송은 UDP 53만 사용한다.
④ 클라이언트는 일반적으로 DNS 질의 전에 hosts 파일을 참조한다.
정답: ③ — 존 전송은 TCP 53. 나머지는 옳다.
M9. DHCP Snooping으로 막으려는 위협은?
① 가짜 DHCP 서버의 응답 ② DNS 캐시 포이즈닝 ③ SYN Flooding ④ SMB 원격 코드 실행
정답: ① — 신뢰 포트(정상 서버가 연결된 포트)에서만 Offer/Ack를 허용해 Rogue DHCP를 막는다. ② DNSSEC, ③ SYN Cookie, ④ 패치·SMBv1 비활성화가 각각의 대책.
M10. ARP 스푸핑 공격이 가능한 근본 이유는?
① ARP Reply가 브로드캐스트로 전송되기 때문
② ARP에 응답의 진위를 검증하는 인증 절차가 없기 때문
③ ARP가 TCP 위에서 동작하기 때문
④ ARP 캐시가 영구 저장되기 때문
정답: ② — ① Reply는 유니캐스트, ③ ARP는 TCP를 쓰지 않는다(EtherType 0x0806으로 바로 이더넷에 실림), ④ 동적 항목은 시간이 지나면 만료된다.
M11. IPv6의 특징이 아닌 것은?
① 128비트 주소 ② 애니캐스트 주소 지원 ③ 브로드캐스트 주소 지원 ④ 고정 길이 40바이트 기본 헤더
정답: ③ — IPv6에는 브로드캐스트가 없다. 멀티캐스트로 대체.
M12. Wireshark의 캡처 필터와 디스플레이 필터에 대한 설명으로 옳은 것은?
① 캡처 필터는 이미 저장된 패킷을 화면에서 걸러낸다.
② 디스플레이 필터는 BPF 문법을 사용한다.
③ 캡처 필터는 캡처 단계에서 조건에 맞지 않는 패킷을 저장하지 않는다.
④ 두 필터는 문법이 완전히 같다.
정답: ③ — ① 디스플레이 필터 설명, ② 캡처 필터가 BPF, ④ 문법이 다르다(port 80 vs tcp.port == 80).
M13. WPA2-Personal 환경에서 공격자가 4-way handshake를 캡처한 뒤 시도할 수 있는 공격은?
① IV 재사용을 이용한 키 복구 ② 오프라인 사전(Dictionary) 대입 공격 ③ SAE 재전송 공격 ④ VLAN Hopping
정답: ② — 약한 PSK는 오프라인으로 대입해 찾을 수 있다. ① WEP의 약점, ③ SAE는 WPA3이며 오히려 오프라인 대입을 막는다, ④ 유선 스위치 공격.
M14. 다음 중 평문 전송 서비스와 그 안전한 대체 수단의 연결이 옳지 않은 것은?
① Telnet → SSH ② FTP → SFTP ③ HTTP → HTTPS ④ SNMPv3 → SNMPv1
정답: ④ — 방향이 거꾸로다. SNMPv1/v2c(평문 community 문자열)를 SNMPv3(인증·암호화)로 바꿔야 한다.
M15. IP 헤더의 Fragment Offset 값을 조작하여 재조립 시 조각이 서로 겹치게 만들어 시스템 오류를 유발하는 공격은?
① Land ② Smurf ③ Teardrop ④ Ping of Death
정답: ③ — ① Land는 출발지=목적지로 위조, ② Smurf는 브로드캐스트 주소로 ICMP 증폭, ④ Ping of Death는 65,535바이트를 넘는 패킷(단편 재조립 후 크기 초과).
카드
오답 / 모르는 용어
네비게이션
| 이전 | 다음 |
|---|---|
| Week02_운영체제 기초 ▶ |